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
相关产品推荐
相关产品推荐

