【问题标题】:Attempt by method 'System.Web.Helpers.Json.Decode(System.String)' to access field 'System.Web.Helpers.Json._serializer' failed尝试通过方法“System.Web.Helpers.Json.Decode(System.String)”访问字段“System.Web.Helpers.Json._serializer”失败
【发布时间】:2013-05-07 10:16:24
【问题描述】:

我有以下 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、变体、inforFeatures、图像和文档将保持不变。 我需要提取所有值以访问诸如languages.["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”失败。

【问题讨论】:

  • 我在link 找到了上述异常答案。有人可以让我知道谁来引用动态 JSON 对象吗?
  • 我可以通过 Json.Decode() 解码您的 Json 字符串,并可以访问语言["de"] 等。我注意到您在 'languages' 和 ["de"] 之间使用点 (.) .那是你的问题吗?

标签: json c#-4.0 .net-4.0


【解决方案1】:

对我们来说,取消选中“项目属性”>“调试”选项卡中的“启用 Visual Studio 托管进程”(从Attempt by method 'System.Web.Helpers.Json..cctor()' to access method 'System.Web.Helpers.Json.CreateSerializer()' failed 的顶部答案)对我们很有帮助

【讨论】:

    【解决方案2】:

    一般的解决方案是使用 Json.net 之类的东西并序列化为 C# 对象 - 这非常灵活,并且与来自客户端的 json 对象的动态特性不冲突。

    【讨论】:

    • 我在 Json.Net 上工作,但序列化为 C# 对象绝对是多级数据的噩梦。感谢您的回复。
    【解决方案3】:

    当您有多个项目具有不同版本的程序集时,似乎会发生此错误;例如,如果您在一个项目中有 JSON.NET 4.5.1,而在另一个项目中有 5.0.6。如果您确保解决方案中的任何地方都存在相同的版本,事情似乎就会得到解决。

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多