如何将字符串序列化为 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?