gpt4 book ai didi

c# - DataContractJsonSerializer:序列化具有接口(interface)属性的类

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:32 24 4
gpt4 key购买 nike

我正在尝试像这样序列化一个类:

[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 字符串,我可以看到过滤器列表中的每个项目都包含一个“__type”属性,用于指定实现 IFilter 的具体类。但是,对于缺少属性“__type”的 ISource 类型的属性“Source”,情况并非如此,因此反序列化过程不知道使用哪个具体类来重新创建该属性。

因为我手边没有 Windows 框,我不知道这是单声道特定的问题还是我在这里遗漏了什么。

我应该如何告诉 DataContractJsonSerializer 在源属性中包含“__type”属性?

提前致谢

更新:

再调查一下,现在我可以强制 DataContractJsonSerializer 始终发出类型信息,并使用 alwaysEmitTypeInformation=true 调用构造函数。但问题仍然存在。有什么想法吗?

最佳答案

在我使用 DataContractJsonSerializer 和反序列化复杂对象(在 Windows 上)的经验中,您需要包含 __type 提示才能使反序列化正常工作。

我的 DataContractJsonSerializer 经验是将 JSON 发送到 WCF 服务

关于c# - DataContractJsonSerializer:序列化具有接口(interface)属性的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5390647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com