C# JSON解析问题求助:无法解析指定JSON格式
解决C#解析JSON的不匹配问题
嘿,我一眼就看到几个导致你解析失败的问题,咱们逐个修正:
1. JSON数组 vs 单个对象不匹配
你的JSON里data字段是数组(用[]包裹着一组对象),但你在C#里把data声明成了单个Data对象,这完全不匹配!得把根类里的data改成数组或者List<Data>类型才能正确解析。
2. 数据类型不一致
JSON里的id是数值类型(3),但你C#类里把id定义成了string。虽然部分序列化库能自动转换,但严格保持类型一致能避免很多潜在问题,建议改成int类型。
3. 无效JSON的逗号问题
你的JSON里"code": "0000004",末尾多了个多余的逗号,虽然有些宽松的解析器能忽略,但这属于无效JSON,建议删掉它让格式更规范。
修正后的C#类定义
// 根类,对应整个JSON结构 public class RootObject { // 用List<Data>对应JSON里的data数组 public List<Data> data { get; set; } } public class Data { // 改成int匹配JSON里的数值id public int id { get; set; } public string code { get; set; } }
解析示例(以Newtonsoft.Json为例)
using Newtonsoft.Json; // 注意已经去掉了多余逗号的有效JSON string json = "{ \"data\": [ { \"id\": 3, \"code\": \"0000004\" } ] }"; var parsedResult = JsonConvert.DeserializeObject<RootObject>(json); // 访问解析后的数据 int firstId = parsedResult.data[0].id; // 输出3 string firstCode = parsedResult.data[0].code; // 输出"0000004"
如果你用的是.NET Core/.NET 5+自带的System.Text.Json,解析代码是这样的:
using System.Text.Json; var parsedResult = JsonSerializer.Deserialize<RootObject>(json);
额外提示:关于code里的隐藏字符
你的code值0000004前面有个看不见的左-to-right标记(U+200E),如果不需要这个字符,可以在解析后移除:
parsedResult.data[0].code = parsedResult.data[0].code.Trim('\u200E');
内容的提问来源于stack exchange,提问作者ASanchez
相关产品推荐
相关产品推荐

