Я хочу сериализовать несколько DataTables для JSON, которые взаимосвязаны, и возможно, что в таблице сопоставления будет добавлена дополнительная таблица. В этом случае у меня есть 3 DataTables.Рекурсивно сериализуйте несколько иерархий Datatable для объекта JSON
- Таблица А как родитель
- Таблица B как ребенок Таблица A
- таблице С, как ребенка Таблица B
Выход JSON должен быть
{
"TableA": [
{
"ID": "2490",
"TYPE": "Electronic",
"TableB": [
{
"ID": "2490",
"ITEM": "XMT123",
"RECEIPT_NUM": "59",
"TableC": [
{
"ID": "2490",
"ITEM": "XMT123",
"QUANTITY": "164"
}
]
},
{
"ID": "2491",
"ITEM": "XMT234",
"RECEIPT_NUM": "12",
"TableC": [
{
"ID": "2491",
"ITEM": "XMT234",
"QUANTITY": "92"
}
]
}
]
},
{
"ID": "2491",
"TYPE": "Electronic",
"TableB": [
{
"ID": "2491",
"ITEM": "XMT456",
"RECEIPT_NUM": "83",
"TableC": [
{
"ID": "2491",
"ITEM": "XMT456",
"QUANTITY": "261"
}
]
},
{
"ID": "2492",
"ITEM": "XMT567",
"RECEIPT_NUM": "77",
"TableC": [
{
"ID": "2492",
"ITEM": "XMT567",
"QUANTITY": "70"
}
]
}
]
}
]
}
Я уже пробовал код вроде этого, но он не работает
static void dataToJson(string connection_string, string query, string table_name)
{
try
{
JArray jArray = new JArray();
DataTable tbl = new DataTable();
DataTable inner_tbl = new DataTable();
SqlConnection conn = new SqlConnection(connection_string);
conn.Open();
var adapter = new SqlDataAdapter(query, conn); // query to get parent
adapter.Fill(tbl);
foreach (DataRow row in tbl.Rows)
{
JObject jo = new JObject();
foreach (DataColumn col in tbl.Columns)
{
jo.Add(new JProperty(col.ColumnName.ToString(), row[col].ToString()));
}
jArray.Add(jo);
query = "i have query to get child";
dataToJson(connection_string, query, table_child);
}
}
catch (Exception e)
{
WriteLog(e.Message, GetCurrentMethod(e));
}
}
Это работа только 2 записи на TableA. 3 следующая запись получилась ошибка. Не удается добавить свойство TableB в Newtonsoft.Json.Linq.JObject. Имущество с тем же именем уже существует на объекте. – frenzybluez
теперь он отлично работает, после ловли без исключения. Большое спасибо. – frenzybluez
Благодарим вас за то, что отметили мой ответ как лучший ответ. Дайте мне знать, если мне нужно что-то обновить. – jhmt