如何将字符串序列化为 JSON 并按其中一个值分组?

Posted

技术标签:

【中文标题】如何将字符串序列化为 JSON 并按其中一个值分组?【英文标题】:How to serialize a string into JSON and group by one of the values? 【发布时间】:2022-01-04 13:13:45 【问题描述】:

我目前正在使用 JsonConvert().SerialiseObject(dt) 将数据表序列化为 JSON 格式,类似于 "id": "123", "name": "xyz", "value": "a","id": "234", "name": "xyz", "value": "a","id": "789, "name": "x", "value": "b"

我希望按值对格式进行分组,例如:-

[
   
      "value":"a",
      "members":[
         
            "id":"123",
            "name":"xyz"
         ,
         
            "id":"234",
            "name":"xyz"
         
      ]
   ,
   
      "value":"b",
      "members":[
         
            "id":"789",
            "name":"x"
         
      ]
   
]

用 newtonsoft 很容易实现吗?

【问题讨论】:

Newtonsoft 擅长序列化/反序列化对象。您应该将所需的结构创建为 C# 类,从数据中填充它(AutoMapper 是在不同 C# 类之间遍历数据的好工具),然后使用 Newtonsoft 对其进行序列化。序列化程序并不是重构数据的最佳工具。 【参考方案1】:

您最好在序列化之前获取所需格式的数据。 例如这样的事情:

using System;
using System.Linq;
using System.Text.Json;

var dataTable = new[]

    new  Id = 123, Name = "xyz", value = "a" ,
    new  Id = 123, Name = "xyz", value = "a" ,
    new  Id = 123, Name = "xyz", value = "b" ,
;

var groupedByValue = dataTable
    .GroupBy(x => x.value)
    .Select(x => new
    
        Value = x.Key,
        Members = x.Select(m => new
        
            m.Id,
            m.Name
        )
    );

var json = JsonSerializer.Serialize(groupedByValue);

Console.WriteLine(json);

【讨论】:

这是一个非常简单的解决方案,谢谢!我确实尝试在 sql 中按值分组,但序列化结果是平的

以上是关于如何将字符串序列化为 JSON 并按其中一个值分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将动态对象序列化为 dotnet core 中的 JSON 字符串?

序列化为 JSON 字符串时如何修复 OutOfMemoryException?

如何覆盖属性的 JSON 序列化,将值序列化为字符串而不是对象?

使用JSON.Net将字符串属性值反序列化为类实例

将表单数据序列化为 JSON 时如何保留值类型

如何将字典的值序列化为json(使用json.net)[重复]