【发布时间】:2014-09-19 20:32:27
【问题描述】:
我在使用 Json.NET(版本 6.0.5)时遇到了一个问题,这让我有点困惑。
我的一个要被序列化的类看起来像这样:
[JsonConstructor]
public MyContainerClass(IEnumerable<AbstractBaseClass> myDerivedUnitClasses)
{
if (myDerivedUnitClasses == null)
{
Units = ImmutableHashSet.Create<object>();
}
else
{
Units = myDerivedUnitClasses.ToImmutableHashSet();
}
}
public IEnumerable<AbstractBaseClass> Units { get; private set; }
使用 Json.Convert 并将 TypeNameHandling 设置为 TypeNameHandling.Auto 可以毫无问题地进行序列化。序列化的 JSON 包含属性的预期 $type-qualifier:"System.Collections.Immutable.ImmutableHashSet`1[[AbstractBaseClass, MyLibrary]], System.Collections.Immutable"
我的解决方案中有一个项目,我序列化数据结构,另一个项目使用Json.Convert 反序列化它(反序列化也使用自动类型名称处理)。反序列化失败并出现以下错误:Error resolving type specified in JSON System.Collections.Immutable.ImmutableHashSet`1[[AbstractBaseClass, MyLibrary]], System.Collections.Immutable
使用 Json.NET 的源代码,我将错误追溯到 DefaultSerializationBinder 调用 assembly.GetType(string name) 并得到 null 作为结果。
到目前为止很糟糕。现在让我特别困惑的部分出现了:当我在序列化数据结构的同一代码块中反序列化 JSON 时,一切正常(使用我在其他项目中使用的相同代码)。
感谢您的帮助。
【问题讨论】:
-
尝试将不可变集合的程序集引用添加到反序列化数据的项目中。
标签: c# json.net deserialization .net-assembly appdomain