Shy*_*yju 5 wcf inheritance serialization datacontract
在WCF中,如何从未标记DataContractAttribute或SerializableAttribute的类继承并将其用作datacontract?
例如:我有一个自定义类,名为“ EmailAttachment”,该类是从System.Net.Mail.Attachment继承的:
[DataContract]
public class EmailAttachment : Attachment
{
[DataMember]
public string AttachmentURL
{
set;
get;
}
[DataMember]
public string DisplayName
{
set;
get;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我发布服务时,它抛出了运行时错误,说明:
System.Runtime.Serialization.InvalidDataContractException:类型'EmailAttachment'无法继承未标记有DataContractAttribute或SerializableAttribute的类型。
有什么解决方法?
这取决于您希望数据合同是什么样子。不能使用包装器而不是派生类吗?就像是:
[DataContract]
public class EmailAttachment
{
public EmailAttachment(){}
internal EmailAttachment(Attachment inner) {_attachment = inner;}
[DataMember]
public string AttachmentURL
{
set;
get;
}
[DataMember]
public string DisplayName
{
set;
get;
}
private Attachment _attachment;
}
Run Code Online (Sandbox Code Playgroud)
如果您希望在数据协定中公开内部 System.Mail.Attachment 的任何状态,则可以添加 DataMember 属性来显示该状态。