我正在尝试像这样序列化一个类:
[DataContract]
public class GenericFlow
{
[DataMember]
public ISource Source { get; set; }
[DataMember]
public IList<IFilter> Filters { get; set; }
}
当我序列化该对象的实例时,一切正常,但如果我尝试反序列化,则会出现错误。我正在使用 Mono 2.6 进行测试,这是单声道平台上的错误:
Stacktrace:
Native stacktrace:
/usr/bin/mono() [0x48563b]
/usr/bin/mono() [0x4d275f]
/lib/libpthread.so.0(+0xfb40) [0x7fd5f8d6eb40]
/usr/bin/mono(mono_object_get_virtual_method+0x174) [0x4f5744]
/usr/bin/mono() [0x555524]
[0x41632228]
Debug info from gdb:
如果我从源属性中删除 DataMember 属性,则反序列化工作。
查看在序列化过程中生成的 json 字符串,我可以看到 Filters 列表中的每个项目都包含一个“__type”属性,用于指定实现 IFilter 的具体类。但是对于缺少属性“__type”的 ISource 类型的属性“Source”,情况并非如此,因此反序列化过程不知道使用哪个具体类来重新创建该属性。
由于我没有方便的 Windows 框,我不知道这是否是单声道特定问题,或者我在这里遗漏了一些东西。
我应该如何告诉 DataContractJsonSerializer 在源属性中包含“__type”属性?
提前致谢,
更新:
再调查一下,现在我可以强制 DataContractJsonSerializer 始终发出类型信息,调用带有 alwaysEmitTypeInformation=true 的构造函数。但问题仍然存在。有任何想法吗?