gpt4 book ai didi

WCF - 序列化继承的类型

转载 作者:行者123 更新时间:2023-12-03 20:12:50 27 4
gpt4 key购买 nike

我有这些类(class):

[DataContract]
public class ErrorBase {}

[DataContract]
public class FileMissingError: ErrorBase {}

[DataContract]
public class ResponseFileInquiry
{
[DataMember]
public List<ErrorBase> errors {get;set;};
}

ResponseFileInquiry 类的一个实例是我的服务方法返回给客户端的。现在,如果我用 ErrorBase 的实例填充 ResponseFileInquiry.errors,一切正常,但如果我添加一个继承类型 FileMissingError 的实例,我会在序列化期间收到服务端异常:
Type 'MyNamespace.FileMissingError' with data contract name 'FileMissingError' 
is not expected. Add any types not known statically to the list of known types -
for example, by using the KnownTypeAttribute attribute or by adding them to the
list of known types passed to DataContractSerializer.'

所以序列化器变得困惑,因为它期望 List 包含声明的类型对象 (ErrorBase) 但它正在获取继承的类型 (FileMissingError) 对象。

我有一大堆错误类型,列表将包含它们的组合,那么我该怎么做才能使它工作?

最佳答案

您应该将KnownType 属性添加到您的基类

[DataContract]
[KnownType(typeof(FileMissingError))]
public class ErrorBase {}

在此 blog 中阅读有关KnownType 属性的更多信息

关于WCF - 序列化继承的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2329464/

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