我有以下JSON;
{
"b2c": {
"languages": {
"de": {
"models": {
"t300": {
"name": "Aveo",
"bodyTypes": {
"t300-4d-my13": {
"trimLevels": {
"lt": {
"name": "LT",
"variants": {
"1.2_16V_86_Gas_MT": {
"name": "1.2 MT",
"price": {
"EUR": {
"value": 13990,
"formatted": "13.990,00 €"
}
},
"infoFeatures": {
"fuel_consumption_extra_urban#consumption": {
"name": "Kraftstoffverbrauch außerorts ",
"value": "4.6",
"formatted": "4,6"
},
"top_speed#kilometer_per_hour": {
"name": "Höchstgeschwindigkeit",
"value": "171",
"formatted": "171"
}
},
"images": null,
"documents": null
}
}
}
}
}
}
}
}
}
}
}
}
b2c,de,t300,t300-4d-my13,It等的值是动态的,但语言,模型,bodyTypes,trimLevels,variants,inforFeatures,图像和文档将保持相同。 我需要提取所有访问值,如语言。[“de”],models。[“t300”]。name,timeLevels。[“It”],Variants和infoFeatures,因为这些键[“”]是动态的,所以我我不知道该推荐什么。
我试过了,
var jsonSerializer = new JsonSerializer();
dynamic dynamicObject = jsonSerializer.Deserialize(new JsonTextReader(new StringReader(jsonString)));
//var level1 = dynamicObject.b2c
我也看过这个 Deserialize JSON into C# dynamic object?
并尝试了
var dynamicObject = Json.Decode(jsonString);
但收到以下错误;
尝试通过方法'System.Web.Helpers.Json.Decode(System.String)'访问字段'System.Web.Helpers.Json._serializer'失败。
答案 0 :(得分:3)
对我们来说,它有助于取消选中"启用Visual Studio托管流程"在项目属性>调试选项卡,从顶部答案Attempt by method 'System.Web.Helpers.Json..cctor()' to access method 'System.Web.Helpers.Json.CreateSerializer()' failed
答案 1 :(得分:2)
一般的解决方案是使用类似Json.net的东西并序列化为C#Object - 这非常灵活,并且不会与来自客户端的json对象的动态特性发生冲突。
答案 2 :(得分:1)
当您有多个具有不同版本程序集的项目时,似乎会发生此错误;例如,如果你在一个项目中有JSON.NET 4.5.1而在另一个项目中有5.0.6。如果确保解决方案中存在相同的版本,事情似乎就会被排序。