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

如何使用Json.NET反序列化二维类数组JSON为C#类并读取属性值

C# 使用Newtonsoft.Json反序列化指定结构JSON的方法

你定义的类结构完全匹配目标JSON结构,读取失败通常是反序列化目标类型指定错误、属性访问层级不对导致的,可按以下步骤操作:

1. 正确执行反序列化

你定义的Rootobject是嵌套在APIDistance类内部的嵌套类,反序列化时需要明确指定目标类型为APIDistance.Rootobject,示例代码如下:

// 引入必要命名空间
using Newtonsoft.Json;
using System.Linq;

// jsonStr为你从URL获取到的JSON字符串
string jsonStr = "你的JSON字符串内容";
APIDistance.Rootobject deserializeResult = JsonConvert.DeserializeObject<APIDistance.Rootobject>(jsonStr);

注意:不要把APIDistance作为反序列化的目标类型,该类只是所有实体类的容器,没有对应JSON的任何属性。

2. 层级读取属性值

JSON结构是多层嵌套的,读取属性时需要按照层级逐层访问,同时建议添加空值判断避免空引用异常:

if (deserializeResult != null && deserializeResult.status == "OK")
{
    // 读取出发地、目的地地址
    string originAddress = deserializeResult.origin_addresses?.FirstOrDefault() ?? "无出发地信息";
    string destAddress = deserializeResult.destination_addresses?.FirstOrDefault() ?? "无目的地信息";

    // 读取距离、耗时信息
    var firstRow = deserializeResult.rows?.FirstOrDefault();
    var firstElement = firstRow?.elements?.FirstOrDefault();
    if (firstElement != null && firstElement.status == "OK")
    {
        // 距离文本(如220 ft)
        string distanceText = firstElement.distance?.text;
        // 距离数值(单位:米)
        int distanceValue = firstElement.distance?.value ?? 0;
        // 耗时文本(如1 min)
        string durationText = firstElement.duration?.text;
        // 耗时数值(单位:秒)
        int durationValue = firstElement.duration?.value ?? 0;

        // 此处可正常使用以上读取到的所有值
    }
}

可选优化

如果不想每次访问都加APIDistance.前缀,可以把Rootobject、Row、Element等类从APIDistance类中移出,改为和APIDistance同级的公共类即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:00:05