[英]Converting a JSON object to dynamic List object without knowing it children structure
我需要从 JSON object 生产 excel 板材。 我的 JSON object 是未知的,并且可能因呼叫而异。 它具有简单的结构(多行中的相同字段)。
我想使用以下代码。
workSheet.Cells[2, 1].LoadFromCollection(dataList, false);
dataList输入为 List(动态)
由于我的 JSON 未知,我无法为此列表定义 class(参数名称和类型)
我的问题是如何将 JSON object 动态转换为列表?
例如,我有 json object 有 3 行要导出:
dataJson -> [{"FirstName":"Yaniv","LastName":"Test","Age": 30,"SubmitDate":"2019-10-04"},{....},{....}]
我需要它是一个 List dataList -> Count 3
第一项:
Age 30
FirstName "Yaniv"
LastName "Test"
SubmitDate [2019-10-04]
您可以将 JSON 反序列化为List<Dictionary<string, object>>
。 例如:
var json = "[{\"FirstName\":\"Yaniv\",\"LastName\":\"Test\",\"Age\": ......]";
var data = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json);
现在您可以从此列表中提取一些详细信息。 所以要获取列名:
var columnNames = data.First().Keys.ToList();
像这样循环你的数据。 这将基本上是 CSV 格式的 output ,但它应该足以根据您的需要进行修改:
// Write out the column headers
foreach (var columnName in columnNames)
{
Console.Write(columnName + ",");
}
Console.WriteLine();
// Write out each element
foreach (var item in data)
{
foreach (var columnName in columnNames)
{
Console.Write(item[columnName] + ",");
}
Console.WriteLine();
}
这将为 output 提供如下内容:
FirstName,LastName,Age,SubmitDate,
Yaniv,Test,30,2019-10-04,
Yaniv,Test,30,2019-10-04,
Yaniv,Test,30,2019-10-04,
如果您使用的是 Newtonsoft.Json 您可以将其反序列化为动态结构:
var dyn = JArray.Parse("{jsonhere...}");
然后你可以读取这样的属性:
const string json =
"[{\"prop\": 1, \"test\": \"test!\"}, {\"prop\": 2, \"test\": \"test again!\"}, {\"prop\": 3, \"test\": \"one more!\"}]";
var parsed = JArray.Parse(json);
foreach (var value in parsed)
{
var prop = value.Value<int>("prop");
var test = value.Value<string>("test");
Console.WriteLine($"Prop: [{prop}] | Test: [{test}]");
}
结果 output 将是:
Prop: [1] | Test: [test!]
Prop: [2] | Test: [test again!]
Prop: [3] | Test: [one more!]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.