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
相关产品推荐
相关产品推荐

