0

以下概念是否可能,或者我将无法将其序列化给客户端。假设所有的通信都只处理 BaseContractClasses 但服务器使用特殊的子类来整理额外的服务器专用数据。

[DataContract]
public class BaseContractClass
{
  [DataMember]
  public int valueToTransmit;
}

public class ServiceOnlyContractClass : BaseContractClass
{
  public int valueNotToTransmit;
}
4

1 回答 1

0

这个新类ServiceOnlyContractClass将继承其基类的所有字段和所有内容,但由于它没有任何 [DataContract] 或 [DataMember] 属性,因此它不会出现在您的服务合同(WSDL/XSD)中。

如果这就是你想要的,是的,那就是这样做的方法。DataContract 和DataMember 属性是特定的,例如您必须显式设置它们并且它们不会被继承到派生类。

更新: .NET 3.5 Service Pack 1 为 WCF DataContractSerializer 引入了一组新规则,从 .NET 3.5 SP1 开始,DCS 似乎将对任何公共类及其任何公共属性进行序列化。这是为了简化生活并允许 POCO(普通旧 CLR 对象)类的序列化而不用属性装饰它们 - 但同时,如果你不想要,似乎没有办法关闭该功能它.....

有关更多详细信息,请参阅不带属性的 DataContracts

于 2010-01-20T06:14:22.673 回答