WCF序列化与对象继承?

DDi*_*ita 5 wcf serialization .net-3.5

我有两个对象,一个在我们的企业级别,另一个在我们的服务级别.服务对象继承自企业.这是一个简单的例子:

[DataContract]
public class EnterpriseObject{
     [DataMember]
     int ID{get; set;}

     string InternalUse{get; set;}
}

[DataContract]
public class ServiceObject: EnterpriseBaseObject{
     [DataMember]     
     string Address{get; set;}
}
Run Code Online (Sandbox Code Playgroud)

是否有可能只在序列化中公开ServiceObject(具有EnterpriseObject的继承属性)?我不希望客户端看到列为选项的企业对象?正如您在示例中所看到的,未为InternalUser属性设置DataMember属性.这是唯一的方法吗?谢谢

Mar*_*ell 7

你通过添加一个[KnownType(typeof(ServiceObject))]来处理继承EnterpriseBaseObject- 但是,EnterpriseBaseObject它仍然是合同的一部分,它的存在将是公开的.但只有标记的成员[DataMember]才会发布.

一个选项(删除继承)是为了序列化目的而有一个单独的DTO,并且在DTO版本和实际版本之间进行转换 - 但这会产生额外的工作.