Вопрос по datatable, json.net, serialization, c#, json – Конвертировать DataTable в JSON с ключом на строку
Я думал, что следующее будет довольно распространенной задачей, и предполагал, что для нее будет простое решение, но я не могу его найти.
Если у меня есть дата в следующей структуре.
ID Name Active
ID1 John TRUE
ID2 Bill FALSE
Я хотел бы сериализовать его как объект JSON, где столбец идентификатора является узлом в объекте JSON, например:
[
{
"ID1": {
"Name": "John",
"Active": "True"
},
"ID2": {
"Name": "Bill",
"Active": "False"
}
}
]
Я посмотрел в JSON.NET, но не смог заставить его работать. Изменить: я использую C #
Вы смотрели на это?stackoverflow.com/questions/451460/datatable-to-json
Хм, верно, забыл упомянуть C #, спасибо.
Это не произойдет само по себе. На каком языке вы работаете?
2
ответа
Используя JSON.NET (Newtonsoft.Json.Linq
)
var obj = new JObject(
dataTable.Rows.Cast<DataRow>()
.Select(r => new JProperty(r["ID"].ToString(),
new JObject(
new JProperty("Name", r["Name"].ToString()),
new JProperty("Active", r["Active"].ToString())
)
))
);
// Convert the JObject to a JSON string
var json = obj.ToString();
Это довольно просто с JSON.NET. Просто преобразуйте свою таблицу данных в эквивалентный словарь словарей:
public Dictionary<string, Dictionary<string, object>> DatatableToDictionary(DataTable dt, string id)
{
var cols = dt.Columns.Cast<DataColumn>().Where(c => c.ColumnName != id);
return dt.Rows.Cast<DataRow>()
.ToDictionary(r => r[id].ToString(),
r => cols.ToDictionary(c => c.ColumnName, c => r[c.ColumnName]));
}
Затем позвоните:
JsonConvert.SerializeObject(DatatableToDictionary(dt, "ID"), Newtonsoft.Json.Formatting.Indented);
Вот полный тест:
var dt = new DataTable("MyTable");
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("Active");
dt.LoadDataRow(new[] {"ID1", "John", "True"}, true);
dt.LoadDataRow(new[] {"ID2", "Bill", "False"}, true);
JsonConvert.SerializeObject(DatatableToDictionary(dt, "ID"));
И результат:
{
"ID1": {
"Name": "John",
"Active": "True"
},
"ID2": {
"Name": "Bill",
"Active": "False"
}
}
Спасибо, отличный вспомогательный метод! Спасибо за полный пример.
Похожие вопросы
И это:<a href="http://www.west-wind.com/weblog/posts/2008/Sep/03/DataTable-JSON-Serialization-in-JSONNET-and-JavaScriptSerializer" rel="nofollow noreferrer">west-wind.com/weblog/posts/2008/Sep/03/…</a>
Вы смотрели на это?<a href="http://stackoverflow.com/questions/451460/datatable-to-json">stackoverflow.com/questions/451460/datatable-to-json</a>
Хм, верно, забыл упомянуть C #, спасибо.
Это не произойдет само по себе. На каком языке вы работаете?