Преобразование 2 DataTable в объект Netsed JSon

У меня есть 2 таблицы данных, которые я получаю из базы данных и заполняю их следующим образом.

 DataTable dt1 = new DataTable();
 DataTable dt2 = new DataTable();

   MySqlDataReader sdr;
   using (MySqlConnection Conn = new MySqlConnection(dbConn))
   {
       Conn.Open();
       using (MySqlCommand myCmd = new MySqlCommand("Select Query 1", Conn))
       {
          // Filtering 
           sdr = myCmd.ExecuteReader();
           dt1.Load(sdr);
       }
       using (MySqlCommand myCmd = new MySqlCommand("Select Query 2", Conn))
       {
          // Filtering 
           sdr = myCmd.ExecuteReader();
           dt2.Load(sdr);
       }
       sdr.Close();
       Conn.Close();
   }

Dt1 возвращает 1 строку данных, а dt2 возвращает количество данных.

Пример данных для td1 будет таким

 Column1        Column2         columnN
 ---------------------------------------------
 ColumnValue    ColumnValue     ColumnValue

Пример данных для td2 будет таким

 Column1        Column2         columnN
 ---------------------------------------------
 ColumnValue    ColumnValue     ColumnValue
 ColumnValue    ColumnValue     ColumnValue
 ColumnValue    ColumnValue     ColumnValue
 ...........    ............    ............

Теперь моя цель - преобразовать эти 2 таблицы данных в nested json object, как это

 Data = {
   "dt1":{
         "Column1":"Value",
         "Column2":"Value",
         "ColumnN":"Value"
       },
    "dt2":[
       {
         "column1":"Value",
         "column2":"Value",
         "columnN":"Value"
       },
       {
         "Column1":"Value",
         "Column2":"Value",
         "ColumnN":"Value"
       },
           ...... and so on
      ]
}

Просто для ясности: эти Data будут использоваться на панели инструментов, поэтому они поступают из разных таблиц через Subqueries пример столбца в dt1 будет выглядеть как Total Users, Active Users и т. д., а пример столбца в dt2 будет похож на действия пользователя и т. д.

Я пробовал построитель строк (который, я думаю, является решением) и сериализатор JavaScript, такой как эта статья

Ваш вопрос должен быть четким. «dt1 возвращает 1 значение для каждой строки», но в вашем вложенном json отображается только 1 строка с разными столбцами. Можете ли вы показать данные DT1 и DT2 после того, как вы получили их из БД, пожалуйста?

Serge 20.02.2023 12:13

Я имею в виду, что dt1 — это один объект, а dt2 is list object я добавлю образцы данных для обоих.

Abdi fatah 20.02.2023 12:33

Я добавил образцы данных обоих боров 'Datatables. dt1 разрешается возвращать 1 строку данных, а dt2 возвращает N строк данных.

Abdi fatah 20.02.2023 13:13
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
1
3
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из вашего вопроса совершенно неясно, какой тип вы хотите, но если вам нужны классы С#

Data data = new Data { dt1 = JArray.FromObject(dt1)[0].ToObject<L<Dt1>(), 
                       dt2 = JArray.FromObject(dt2).ToObject<List<Dt2>>() };

public class Data
{
    public Dt1 dt1 { get; set; }
    public List<Dt2> dt2 { get; set; }
}

public class Dt1
{
    public string Column1 { get; set; }
    public string Column2 { get; set; }
    public string ColumnN { get; set; }
}

public class Dt2
{
    public string column1 { get; set; }
    public string column2 { get; set; }
    public string columnN { get; set; }

}

Или если вам нужна просто строка json, вам не нужны никакие классы

string json = JsonConvert.SerializeObject( new { dt1 = JArray.FromObject(dt1)[0], dt2 = dt2 });

Или JObject

JObject jObj = JObject.FromObject(new { dt1 = JArray.FromObject(dt1)[0], dt2 = dt2 });

Я сначала преобразую его в просто объект, как указано выше, а затем буду использовать его во внешнем интерфейсе, возможно, извлекая его из объекта json. Объект json будет использоваться версиями Web и Mobile, следовательно, конец API, который возвращает объект json. Спасибо за Ваш ответ.

Abdi fatah 20.02.2023 19:55

Какая разница между json string и json object?. Я вижу, что они оба возвращают один и тот же точный формат данных

Abdi fatah 21.02.2023 08:40

@AbdifatahA Это та же разница, что и между DateTime.Now и DateTime.Now.ToString(). Dt1 в виде списка, который вы задаете в своем вопросе. Я не вижу ваш код API, поэтому я не знаю, какой ответ вы создаете

Serge 21.02.2023 13:03

Другие вопросы по теме