繁体   English   中英

在不知道子结构的情况下将 JSON object 转换为动态列表 object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM