反序列化无法跨项目运行
本文关键字:项目 运行 反序列化 | 更新日期: 2023-09-27 18:23:50
我遇到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; }
在TypeNameHandling
设置为TypeNameHandling.Auto
的情况下使用Json.Convert
可以毫无问题地对此进行串行化。序列化的JSON包括属性的预期$type
限定符:"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时,一切都很好(使用与我在其他项目中使用的代码相同的代码)。
谢谢你的帮助。
发现一个项目中包含AbstractBaseClass
的程序集存在程序集绑定问题。我在调试时使用了Visual Studio Tools的fuslogvw.exe
来检查错误,并注意到搜索的目录不是我期望的目录,也不包含程序集文件。
我的解决方案是在反序列化之前订阅AppDomain.CurrentDomain.AssemblyResolve
-事件,然后通过事件处理程序中的Assembly.LoadFrom
从正确的路径手动加载程序集。