组合两个相邻的集合来创建Json行

本文关键字:集合 创建 Json 两个 组合 | 更新日期: 2023-09-27 18:12:22

我有一个List<Dictionary<string, List<string>>>,使用NewtonSoft序列化后给出如下内容:

[{
    "Header1" : [
        "25%",
        "1.4%",
        "0.93%"
    ],
    "Header2" : [
        "51%",
        "42%",
        "16"
    ],
    "Header3" : [
        "8%",
        "99%",
        "11.37%"
    ]
}]

我需要将其转换为具有键值对的数据表,类似于以下JSON:

{
    "data":
    [{
        "Header1" : "25%",
        "Header2" : "51%",
        "Header3" : "8%",
    },
    {
        "Header1" : "1.4%",
        "Header2" : "42%",
        "Header3" : "99%",
    }]
}

你能建议一种优雅的方法来实现这一点,而不做手动foreach循环吗?

请注意头文件的值不是静态的;

组合两个相邻的集合来创建Json行

您可以使用Linq方法做这样的事情:

var initialData = new List<Dictionary<string, List<string>>>
{
    new Dictionary<string, List<string>>
    {
        { "Header1", new List<string> {"25%", "1.4%", "0.93%" } },
        { "Header2", new List<string> {"51%", "42%", "16%" } },
        { "Header3", new List<string> {"8%", "99%", "11.37%" } }
    },
};
var result = new
{
    data = initialData.First()
            .Select(kvp => kvp.Value.Select((v, i) => 
                           new { Key = kvp.Key, Value = v, Index = i }))
            .SelectMany(a => a)
            .GroupBy(a => a.Index)
            .Select(g => g.ToDictionary(a => a.Key, a => a.Value))
};
string json = JsonConvert.SerializeObject(result, Formatting.Indented);
Console.WriteLine(json);
以上代码将给出如下输出:
{
  "data": [
    {
      "Header1": "25%",
      "Header2": "51%",
      "Header3": "8%"
    },
    {
      "Header1": "1.4%",
      "Header2": "42%",
      "Header3": "99%"
    },
    {
      "Header1": "0.93%",
      "Header2": "16%",
      "Header3": "11.37%"
    }
  ]
}