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

C#中使用Newtonsoft Json反序列化含嵌套数组JSON的正确映射类结构

正确的C#类结构用于反序列化嵌套坐标JSON

首先看你给出的JSON结构:

"coordinates" : [ [ [ 482035.87650000025, 3768510.0446000006, 0 ], [ 482035.86720000021, 3768514.4123, 0 ], [ 482035.68240000028, 3768514.4119000006, 0 ] ] ]

这里的coordinates是一个三层嵌套的数组:最外层是一个数组,里面包含一个数组,这个数组又包含多个由3个数值组成的子数组(代表x、y、z坐标)。

针对这个结构,你可以用两种方式定义映射类:

方式一:直接使用嵌套数组类型

这种方式最直接,完全匹配JSON的嵌套数组结构:

public class RootObject
{
    [JsonProperty("coordinates")]
    public List<List<List<double>>> Coordinates { get; set; }
    // 也可以用数组类型替代List:public double[][][] Coordinates { get; set; }
}

反序列化的代码示例:

string json = "{\"coordinates\" : [ [ [ 482035.87650000025, 3768510.0446000006, 0 ], [ 482035.86720000021, 3768514.4123, 0 ], [ 482035.68240000028, 3768514.4119000006, 0 ] ] ]}";
RootObject result = JsonConvert.DeserializeObject<RootObject>(json);

方式二:封装内层坐标为实体类(更具可读性)

如果你希望代码更具语义化,方便后续业务逻辑操作坐标,可以把每个三维坐标封装成一个Point类。需要注意属性顺序要和JSON数组的数值顺序对应,或者用特性指定映射关系:

public class Point
{
    // Newtonsoft.Json 13.0+支持用JsonPropertyIndex指定数组位置,避免顺序问题
    [JsonPropertyIndex(0)]
    public double X { get; set; }
    [JsonPropertyIndex(1)]
    public double Y { get; set; }
    [JsonPropertyIndex(2)]
    public double Z { get; set; }
}

public class RootObject
{
    [JsonProperty("coordinates")]
    public List<List<Point>> Coordinates { get; set; }
}

这样反序列化时,JSON里的每个三维数值数组都会被自动转换成Point对象,后续使用坐标时会更直观。

两种方式都能正常工作:如果只是快速解析数据,方式一更简单;如果需要长期维护或业务逻辑依赖坐标操作,方式二更合适。

内容的提问来源于stack exchange,提问作者Sithira Pathirana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:24:37