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

如何为指定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:36:01