使用Json.Net({44)序列化派生类型时出错

时间:2015-11-05 10:06:37

标签: c# serialization json.net

我试图用这段简单的代码(de)序列化一个类: -

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };

// Serialize
var json = JsonConvert.SerializeObject(obj, settings);

// Deseralize - this is where it fails
var test = JsonConvert.DeserializeObject<MyObject>(json, settings);

DeseralizeObject()因JsonSerializationException而失败: -

  

在JSON&#39; Xxx.Common.MyObject,Xxx.Common&#39;中指定的错误解析类型。路径&#39; $ type&#39;,第1行,第110位

     

内部异常:JsonSerializationException,message&#34;无法加载程序集&#39; Xxx.Common&#34;。

我不明白为什么它无法加载程序集 - 这个项目正在引用它!

如果我不使用JsonSerializerSettings,它就有效,但是我需要这个,因为被序列化的类最终会有一个List<SomeBaseClass>属性,它将包含派生类型。

有什么想法?我使用的是Json.Net v6.0。

修改:

我刚尝试将TypeNameAssemblyFormat = FormatterAssemblyStyle.Full添加到我的序列化设置中,这导致了这种不同(且令人困惑)的异常消息: -

  

在JSON&#39; Xxx.Common.MyObject,Xxx.Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null&#39;中指定的类型与&#39; Xxx.Common.MyObject,Xxx.Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null&#39;不兼容。路径&#39; $ type&#39;,第1行,第165位。

EDIT2:

为了澄清事情,上面的代码是问题的完整副本,并且驻留在更大的WPF应用程序中,而MyObject驻留在不同的项目中(&#34; Xxx.Common&#34;)相同的解决方案,并由WPF应用程序项目引用 - 我简单地用&#34; Xxx&#34;这篇文章。

MyObject是我创建的一个简单的POCO,用于排除可能由于复杂类型引起的任何问题,并且由一些字符串和双重属性组成,即

public class MyObject
{
    public string Name {get;set;}
    public double Foo {get;set;}
    ...
}

序列化的JSON看起来像这样(再次替换公司NS) - 相关部分(即&#34; $ type&#34;)似乎是正确的: -

  

{&#34; $ type&#34;:&#34; Xxx.Common.MyObject,Xxx.Common&#34;,&#34; Name&#34;:null,&#34; Foo&#34; :0.0&#34;步长&#34;:0.0&#34;收敛&#34;:0.0&#34;截止&#34;:0.0}

0 个答案:

没有答案