在WCF中,如何从未使用DataContractAttribute或SerializableAttribute标记的类继承并将其用作datacontract?
Ex:我有一个名为“EmailAttachment”的自定义类,我继承自System.Net.Mail.Attachment:
[DataContract]
public class EmailAttachment : Attachment
{
[DataMember]
public string AttachmentURL
{
set;
get;
}
[DataMember]
public string DisplayName
{
set;
get;
}
}
但是当我发布服务时,它会抛出一个运行时错误,说:
System.Runtime.Serialization.InvalidDataContractException:类型“EmailAttachment”无法继承未使用DataContractAttribute或SerializableAttribute标记的类型。
这是什么解决方法?
答案 0 :(得分:0)
这取决于您希望数据合约的外观。你不能使用包装器而不是派生类吗?类似的东西:
[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;
}
如果要在数据协定中公开内部System.Mail.Attachment中的任何状态,则可以将DataMember属性添加到表面。