У меня есть 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 — это один объект, а dt2 is list object я добавлю образцы данных для обоих.
Я добавил образцы данных обоих боров 'Datatables. dt1 разрешается возвращать 1 строку данных, а dt2 возвращает N строк данных.
Из вашего вопроса совершенно неясно, какой тип вы хотите, но если вам нужны классы С#
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. Спасибо за Ваш ответ.
Какая разница между json string и json object?. Я вижу, что они оба возвращают один и тот же точный формат данных
@AbdifatahA Это та же разница, что и между DateTime.Now и DateTime.Now.ToString(). Dt1 в виде списка, который вы задаете в своем вопросе. Я не вижу ваш код API, поэтому я не знаю, какой ответ вы создаете
Ваш вопрос должен быть четким. «dt1 возвращает 1 значение для каждой строки», но в вашем вложенном json отображается только 1 строка с разными столбцами. Можете ли вы показать данные DT1 и DT2 после того, как вы получили их из БД, пожалуйста?