我试图用这段简单的代码(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}