You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中多表查询结果列表的格式转换实现问询

在C#中实现POI数据的分组与格式转换

嘿,这个需求用C#的LINQ就能轻松搞定!我们只需要先按idPoiType对原始数据分组,再把每组里的经纬度转换成坐标数组,就能得到你想要的格式。下面是具体的实现步骤和代码示例:

1. 定义对应的实体类

首先我们需要定义两个实体类,分别对应原始数据格式和目标数据格式,这样方便后续的序列化/反序列化操作:

// 对应原始JSON的实体类
public class OriginalPoi
{
    // 注意字段名要和原始JSON中的$id完全匹配
    public string $id { get; set; }
    public int idPoiType { get; set; }
    public double latPoint { get; set; }
    public double lngPoint { get; set; }
}

// 对应目标格式的实体类
public class GroupedPoi
{
    public int idPoiType { get; set; }
    public List<double[]> point { get; set; }
}

2. 核心分组转换逻辑

利用LINQ的GroupBy方法可以快速完成分组,再通过Select把分组数据转换成目标格式:

// 假设你已经将原始JSON反序列化为List<OriginalPoi>类型的originalList
var groupedResult = originalList
    // 按idPoiType进行分组
    .GroupBy(poi => poi.idPoiType)
    // 将每个分组转换为目标格式的对象
    .Select(group => new GroupedPoi
    {
        idPoiType = group.Key,
        // 把每组中的经纬度转换成[纬度, 经度]的数组,再收集为列表
        point = group.Select(poi => new double[] { poi.latPoint, poi.lngPoint }).ToList()
    })
    .ToList();

这段代码会自动处理所有不同的idPoiType,如果原始数据中有多个类型的POI,每个类型都会生成一个独立的分组对象。

3. 完整的JSON处理示例

如果你是直接处理JSON字符串,可以结合JSON序列化库(比如Newtonsoft.Json或者System.Text.Json)完成从原始JSON到目标JSON的完整转换:

示例1:使用Newtonsoft.Json(适用于所有.NET版本)

using Newtonsoft.Json;

// 原始JSON字符串
string originalJson = "[{ \"$id\": \"7\", \"idPoiType\": 43, \"latPoint\": 40.522053118634076, \"lngPoint\": -3.665313720703125 }, { \"$id\": \"8\", \"idPoiType\": 43, \"latPoint\": 40.52172689430316, \"lngPoint\": -3.6571168899536133 }]";

// 反序列化为原始数据列表
var originalList = JsonConvert.DeserializeObject<List<OriginalPoi>>(originalJson);

// 执行分组转换
var groupedResult = originalList
    .GroupBy(poi => poi.idPoiType)
    .Select(group => new GroupedPoi
    {
        idPoiType = group.Key,
        point = group.Select(poi => new double[] { poi.latPoint, poi.lngPoint }).ToList()
    })
    .ToList();

// 序列化为目标格式的JSON字符串(带缩进,更易读)
string targetJson = JsonConvert.SerializeObject(groupedResult, Formatting.Indented);
Console.WriteLine(targetJson);

示例2:使用System.Text.Json(适用于.NET Core 3.0+/.NET 5+)

using System.Text.Json;

// 原始JSON字符串
string originalJson = "[{ \"$id\": \"7\", \"idPoiType\": 43, \"latPoint\": 40.522053118634076, \"lngPoint\": -3.665313720703125 }, { \"$id\": \"8\", \"idPoiType\": 43, \"latPoint\": 40.52172689430316, \"lngPoint\": -3.6571168899536133 }]";

// 反序列化为原始数据列表
var originalList = JsonSerializer.Deserialize<List<OriginalPoi>>(originalJson);

// 执行分组转换
var groupedResult = originalList
    .GroupBy(poi => poi.idPoiType)
    .Select(group => new GroupedPoi
    {
        idPoiType = group.Key,
        point = group.Select(poi => new double[] { poi.latPoint, poi.lngPoint }).ToList()
    })
    .ToList();

// 序列化为目标格式的JSON字符串(带缩进)
var jsonOptions = new JsonSerializerOptions { WriteIndented = true };
string targetJson = JsonSerializer.Serialize(groupedResult, jsonOptions);
Console.WriteLine(targetJson);

运行上述代码后,输出的JSON就是你想要的格式啦!

内容的提问来源于stack exchange,提问作者Gabriel Sule

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:41:21