[英]How to convert a json with nested properties to data table in c#
如何使用 c# 以通用方式将具有嵌套属性的 Json 转换为DataTable
以导出为 csv 文件。 样品 json 如下:
{
"Length": {
"Value": 12.93,
"Unit": "m"
},
"Temperature": {
"Value": 28.32,
"Unit": "DegC"
},
"Color": "Blue"
}
我想在表格中展平如下:
"Property" | "Value" | "Unit"
---------------------------------
"Length" | 12.93 | "m"
"Temperature" | 28.32 | "DegC"
"Color" | "Blue" |
请注意, Color
属性不是嵌套的,而Length
和Temperature
属性是嵌套的。 对于无单位属性(例如Color
),应将任何内容(或 null)添加到数据表中的“单位”列。
此外,嵌套属性主要是double
类型,但可以包含任何struct
类型。
将 JSON 转换为 DataTable的解决方案是我最接近的解决方案,但当然不适用于我拥有的嵌套属性。
你可以试试这段代码
var jsonParsed = JObject.Parse(json);
var jsonArr = new JArray();
foreach (var prop in jsonParsed.Properties())
{
var jObj = new JObject { ["Property"] = prop.Name };
var valueType = prop.Value.GetType().Name;
if (valueType == "JValue")
{
jObj["Value"] = (string)prop.Value;
jObj["Unit"] = string.Empty;
}
else if (valueType == "JObject")
{
var nestedProp = (JObject)prop.Value;
jObj["Value"] = (string)nestedProp["Value"];
jObj["Unit"] = nestedProp["Unit"];
}
jsonArr.Add(jObj);
}
DataTable dataTable = jsonArr.ToObject<DataTable>();
我最终通过创建一个DataTable
并按如下方式填充它直接解决了它:
DataTable dataTable = new();
DataColumn[] dataColumns = new DataColumn[3];
dataColumns[0] = new DataColumn("Property");
dataColumns[1] = new DataColumn("Value");
dataColumns[2] = new DataColumn("Unit");
dataTable.Columns.AddRange(dataColumns);
JToken json = JToken.Parse(jsonContent);
foreach (JProperty content in json)
{
DataRow row = dataTable.NewRow();
row["Property"] = content.Name;
if (content.Value.Type == JTokenType.Object)
{
row["Value"] = content.Value["Value"];
row["Unit"] = content.Value["Unit"];
}
else
{
row["Value"] = content.Value;
row["Unit"] = "-";
}
dataTable.Rows.Add(row);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.