如何为指定JSON编写匹配C#类并将其反序列化为自定义C#对象
C# JSON反序列化错误修正方案
现有代码的核心问题
- 根节点匹配错误:当前JSON的最外层是一个包含
formatting字段的对象,你直接将JSON反序列化为formatting类型,缺少了外层根对象的定义,反序列化时无法匹配根节点结构。 - 嵌套层级多余定义:JSON结构中
i数组的元素直接包含o和l两个属性,你额外多定义了一层i类,且错误添加了不存在的ol字段,结构层级和JSON不匹配。
修正后的完整代码
基础版本(字段名与JSON严格对应)
// 根对象,对应JSON最外层结构 public class RootResponse { public Formatting formatting { get; set; } } public class Formatting { public List<BItem> b { get; set; } } public class BItem { public List<RItem> r { get; set; } } public class RItem { // 直接映射i数组,无需中间多余的i类 public List<OlItem> i { get; set; } } public class OlItem { public int o { get; set; } public int l { get; set; } }
反序列化调用调整
RootResponse apiResponseMessage = JsonConvert.DeserializeObject<RootResponse>(responseString); // 后续通过 apiResponseMessage.formatting 访问对应内容
优化版本(符合C#帕斯卡命名规范)
如果需要符合C#编码规范,可通过JsonProperty属性做字段映射:
using Newtonsoft.Json; public class RootResponse { [JsonProperty("formatting")] public Formatting Formatting { get; set; } } public class Formatting { [JsonProperty("b")] public List<BItem> BList { get; set; } = new List<BItem>(); } public class BItem { [JsonProperty("r")] public List<RItem> RList { get; set; } = new List<RItem>(); } public class RItem { [JsonProperty("i")] public List<OlItem> IList { get; set; } = new List<OlItem>(); } public class OlItem { [JsonProperty("o")] public int O { get; set; } [JsonProperty("l")] public int L { get; set; } }
该版本同时给集合属性设置了默认空列表,可避免后续访问时出现空引用异常。
内容的提问来源于stack exchange,提问作者Cristobal BL
相关产品推荐
相关产品推荐

