c# - library - 尝试方法'System.Web.Helpers.Json..cctor()'以访问方法'System.Web.Helpers.Json.CreateSerializer()'失败



github json net (3)

我使用System.Web.Helpers.Json在.NET 4中将一些JSON反序列化为dynamic 。以下代码行失败并出现此错误: TypeInitializationException: Attempt by method 'System.Web.Helpers.Json..cctor()' to access method 'System.Web.Helpers.Json.CreateSerializer()' failed.

var json = Json.Decode(response);

response很长,但是有效的JSON。 这里可能会发生什么事? 我曾尝试使用短手工JSON的LINQPad ,它工作。 这是某种配置问题吗?

[编辑]

这里是实际的示例JSON。 看起来内容几乎无关紧要。 当它在全新的控制台应用程序或LINQPad中运行时,它按预期工作。 但是,如果您尝试从全新的Windows窗体应用程序运行相同的代码,则会出现上述错误。

var json = Json.Decode("{\"r\":{\"0\":{\"id\":\"2\"},\"1\":{\"id\":\"33\"}}}");

[EDIT2]

事实上,事实证明这与项目类型无关。 如果正在调试项目,则会引发异常。 如果只是简单运行,则不会发生异常。 奇怪,呃?

https://ffff65535.com


内置json类存在问题。

如果您想以其他方式实现此目的,请使用以下代码:

JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new DynamicJavaScriptConverter[] { new DynamicJavaScriptConverter() });
var result = WrapObject(serializer.DeserializeObject(value)); // here you will have result.

private object WrapObject(object value)
    {
        IDictionary<string, object> values = value as IDictionary<string, object>;
        if (values != null)
        {
            return new DynamicJsonObject(values);
        }
        object[] arrayValues = value as object[];
        if (arrayValues != null)
        {
            return new DynamicJsonArray(arrayValues);
        }
        return value;
    }

如果您在部分信任中运行,也会发生这种情况。 请查看此处例外说明以查找可能的原因

我不知道这是否适用于您,因为您没有在网络环境中运行,但这是该链接描述的内容:

这种例外情况出现在以下情况中:

  • 通过使用反射,部分受信任的代码将访问不能从普通编译代码访问的私有,受保护或内部方法。

  • 从透明代码访问安全关键型方法。

  • 类库中方法的访问级别已更改,并且引用该库的一个或多个程序集尚未重新编译。


进一步罗兰的答案:列出的一些程序集不匹配可以在AssemblyInfo.cs文件中修复。

我的AssemblyInfo中的违规行是这样的:

[assembly: AllowPartiallyTrustedCallers]

删除这使我可以访问我试图从动态加载该程序集的另一个程序集中设置的公共属性(在公共类上)。





.net-4.0