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

C#反序列化含未知键的数组格式JSON遇阻,求解决方案

解决思路

首先,你的JSON存在语法错误,这会直接导致反序列化失败,先修正:

  • 第二个对象的键"ddddd"缺少闭合引号,改为"ddddd"
  • 第二个对象中"price1": "1.1",末尾的逗号需要删除

修正后的JSON如下:

[
  {
    "item1": {
      "value1": "rhe5h45h",
      "price1": "3.34"
    }
  },
  {
    "ddddd": {
      "value1": "cef3f",
      "price1": "1.1"
    }
  },
  {
    "rrrrr678": {
      "value1": "dfdf",
      "price1": "2"
    }
  }
]

其次,你的反序列化类型不匹配:JSON外层是数组,而你用Dictionary<string, itemList>来接收,应该改为List<Dictionary<string, itemList>>,因为数组中的每个元素都是一个仅含单个动态键的对象。

调整后的C#代码:

var obj = JsonConvert.DeserializeObject<List<Dictionary<string, itemList>>>(jsonFile);

如果需要提取所有的itemList实例并获取未知键名,可以遍历结果:

foreach (var dict in obj)
{
    foreach (var kvp in dict)
    {
        string keyName = kvp.Key; // 这里就是每个未知的键名,比如item1、ddddd等
        itemList item = kvp.Value;
        // 后续处理item的value1和price1属性
    }
}

另外,注意price1在JSON中是字符串类型,而你的类定义为double,Newtonsoft.Json会自动完成类型转换,只要JSON中的字符串是有效的数字格式就不会有问题。如果担心转换失败,可以把类中的price1改为string类型,之后再手动转换为数值类型。

内容的提问来源于stack exchange,提问作者user14369224

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:36:23