如何从 WCF 中未使用 DataContractAttribute 或 SerializableAttribute 标记的类继承?
Posted
技术标签:
【中文标题】如何从 WCF 中未使用 DataContractAttribute 或 SerializableAttribute 标记的类继承?【英文标题】:How to inherit from a class which is not marked with DataContractAttribute or SerializableAttribute in WCF? 【发布时间】:2011-05-26 03:12:18 【问题描述】:在 WCF 中,如何从没有标记 DataContractAttribute 或 SerializableAttribute 的类继承并将其用作数据契约?
例如:我有一个名为“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 标记的类型。
解决方法是什么?
【问题讨论】:
【参考方案1】:这取决于您希望数据合同是什么样子。你不能使用包装器而不是派生类吗?比如:
[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 属性以显示该状态。
【讨论】:
以上是关于如何从 WCF 中未使用 DataContractAttribute 或 SerializableAttribute 标记的类继承?的主要内容,如果未能解决你的问题,请参考以下文章
如何序列化/反序列化 C# WCF DataContract 到 XML
如何在 WCF 中使用 DataContract/DataMember 序列化 Func<int, int>(甚至是一般委托)类型字段
如何拥有一个带有 json 动态成员的 WCF DataContract