如何将DataTable序列化为JSON并按指定字段分组?Newtonsoft能否实现
当然可以轻松实现,你不需要额外写复杂的自定义逻辑,两种常见实现方式如下:
方案1:直接对DataTable分组后序列化(推荐)
不需要先序列化DataTable再处理JSON,直接在内存中对DataTable做分组后再序列化即可,代码示例:
using Newtonsoft.Json; using System.Data; using System.Linq; // 替换为你实际的DataTable对象 DataTable dt = GetYourDataTable(); var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("value")) .Select(g => new { value = g.Key, members = g.Select(row => new { id = row.Field<string>("id"), name = row.Field<string>("name") }) }); // 序列化后直接得到目标格式的JSON string resultJson = JsonConvert.SerializeObject(groupedData, Formatting.Indented);
方案2:处理已序列化的原始JSON
如果你已经拿到了序列化后的原始JSON字符串,也可以用Newtonsoft的Linq to JSON能力直接处理:
using Newtonsoft.Json.Linq; // yourOriginalJsonOutput替换为你当前得到的序列化结果,补全外层括号转为合法JSON数组 string rawJson = "[" + yourOriginalJsonOutput + "]"; JArray rawArray = JArray.Parse(rawJson); var groupedJArray = new JArray( rawArray.GroupBy(item => (string)item["value"]) .Select(g => new JObject( new JProperty("value", g.Key), new JProperty("members", new JArray( g.Select(item => new JObject( new JProperty("id", item["id"]), new JProperty("name", item["name"]) )) )) )) ); string resultJson = groupedJArray.ToString(Formatting.Indented);
两种方案都只用几行代码就能完成需求,不需要额外开发自定义序列化器。
内容的提问来源于stack exchange,提问作者Elbusta
相关产品推荐
相关产品推荐

