Преобразование 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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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