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

C#解析API返回的JSON数据取值报错 求简单实现代码

C# 解析多层嵌套JSON实现方案

常见报错原因

新手解析报错基本都是以下几个问题导致:

  • 数据模型和JSON嵌套结构不匹配,数组类型字段误定义为单个对象
  • 属性名大小写不匹配导致反序列化时字段找不到
  • 字段类型定义错误,比如字符串格式的数字/状态值直接定义为值类型触发转换异常

实现步骤

1. 定义对应结构的强类型模型

注意JSON里的数组字段要定义为List<>泛型类型,is_ok是字符串类型的"0"/"1",不要直接定义为bool避免转换报错:

public class Root
{
    public List<CompanyGroup> Result { get; set; }
}

public class CompanyGroup
{
    public string Company { get; set; }
    public List<ServerInfo> Results { get; set; }
}

public class ServerInfo
{
    public string Name { get; set; }
    public List<string> Access { get; set; }
    public string Is_Ok { get; set; }
}

2. 调用内置API完成反序列化

.NET Core 3.0、.NET 5及以上版本可直接使用内置的System.Text.Json完成解析,不需要额外引入第三方包;.NET Framework环境可通过Nuget安装同名包使用,逻辑完全一致:

using System;
using System.Collections.Generic;
using System.Text.Json;

// 替换为你实际获取到的JSON字符串
string rawJson = "你的JSON字符串内容";

// 配置反序列化规则:忽略属性名大小写差异,避免大小写不匹配报错
var serializeOptions = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};

// 反序列化为强类型对象
Root parsedData = JsonSerializer.Deserialize<Root>(rawJson, serializeOptions);

// 提取数据示例:遍历输出所有服务器信息
foreach (var group in parsedData.Result)
{
    Console.WriteLine($"分组名称:{group.Company}");
    foreach (var server in group.Results)
    {
        string status = server.Is_Ok == "1" ? "运行正常" : "运行异常";
        Console.WriteLine($"服务器:{server.Name},状态:{status}");
        Console.WriteLine("可用访问地址:");
        foreach (string address in server.Access)
        {
            Console.WriteLine($"- {address}");
        }
    }
}

如果习惯使用第三方JSON库,用Newtonsoft.Json的实现逻辑基本一致:定义相同模型后,调用JsonConvert.DeserializeObject<Root>(rawJson)即可完成解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:48:42