我正在尝试序列化这样的类:
[DataContract]
public class GenericFlow
{
[DataMember]
public ISource Source { get; set; }
[DataMember]
public IList<IFilter> Filters { get; set; }
}
当我对这个对象的实例进行seralize时,一切正常,但如果我尝试反序列化,我会收到错误。我正在使用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:
如果我从Source属性中删除DataMember属性,则反序列化工作正常。
看一下序列化过程中产生的json字符串,我可以看到Filters列表中的每个项都包含一个“__type”属性,用于指定实现IFilter的具体类。但是,对于缺少属性“__type”的ISource类型的属性“Source”,情况并非如此,因此desarialization进程不知道哪个具体类用于重新创建属性。
由于我没有方便的窗户盒,我不知道这是单声道特定问题还是我在这里遗漏了一些东西。
我应该如何告诉DataContractJsonSerializer在Source属性中包含“__type”属性?
提前致谢,
更新
调查一下,现在我可以强制DataContractJsonSerializer始终使用alwaysEmitTypeInformation = true发出调用构造函数的类型信息。 但问题仍然存在。有什么想法吗?
答案 0 :(得分:0)
在使用DataContractJsonSerializer和反序列化复杂对象(在Windows上)时,您需要包含__type提示,以便反序列化正常工作。
我的DataContractJsonSerializer体验一直在将JSON发送到WCF服务