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

如何反序列化参数中包含"0"键的JSON响应体到自定义Class

问题核心原因

JSON中data节点下的键为数字开头的字符串"0",而C#语法不允许数字作为属性名的首字符,你定义的_0属性无法和JSON键自动完成映射,因此反序列化失败,可通过以下两种方案解决:

方案1:使用序列化特性显式指定映射键名

适合data下的数字键固定为"0"的场景,通过序列化库提供的特性手动绑定属性和JSON键:

实体类定义示例

// 消息项实体
public class MsgItem
{
    public string MsgID { get; set; }
    public string Status { get; set; }
    public string SendTime { get; set; }
    public string DeliverTime { get; set; }
}

// 响应头元数据实体
public class ResponseMeta
{
    public int status { get; set; }
    public string message { get; set; }
}

// Data节点实体
public class ResponseData
{
    // 使用Newtonsoft.Json(Json.NET)时加此特性
    [JsonProperty("0")]
    // 使用System.Text.Json时替换为下面的特性
    // [JsonPropertyName("0")]
    public MsgItem Item { get; set; }
}

// 完整响应实体
public class ApiResponse
{
    public ResponseMeta meta { get; set; }
    public ResponseData data { get; set; }
}

配置完成后直接调用对应序列化库的反序列化方法即可完成解析。

方案2:将data节点定义为字典类型(更通用)

适合data下的数字键不固定、可能动态新增"1"/"2"等键的场景,无需额外配置即可兼容:

实体类定义示例

// MsgItem、ResponseMeta类和方案1一致,仅需修改ApiResponse的data属性类型
public class ApiResponse
{
    public ResponseMeta meta { get; set; }
    // 字典的键对应JSON中的"0"/"1"等字符串数字,值为对应的消息对象
    public Dictionary<string, MsgItem> data { get; set; }
}

反序列化完成后,通过response.data["0"]即可取出对应对象。

注意事项

  • 不要通过加下划线的方式定义属性试图匹配数字键,默认序列化规则不会自动将_0属性映射为JSON的"0"键。
  • 如果data下的键是动态生成的、数量不固定,优先选择字典方案,无需修改实体类即可兼容后续新增的键。

内容的提问来源于stack exchange,提问作者Mousa Ghajar Najafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:15:02