WCF和对象继承

时间:2011-01-05 12:26:34

标签: c# wcf

我有两个类的以下设置:

[SerializableAttribute]
public class ParentData{
  [DataMember]
  public string Title{get;set;}
}

[DataContract]
public class ChildData : ParentData{
  [DataMember]
  public string Abstract{get;set;}
}

这两个类通过WCF服务提供。但是,我只希望服务将ChildData类公开给最终用户,而是从父级中提取标记的DataMember属性。例如。使用客户端的存根类看起来像:

public class ChildData{
  public string Title{get;set;}
  public string Abstract{get;set;}
}

如果我使用上面的父类和子类,则存根类只包含Abstract属性。

我已经看过在ChildData类上使用KnownType属性,如下所示:

[DataContract]
[KnownType(typeOf(ParentData)]
public class ChildData : ParentData{
  [DataMember]
  public string Abstract{get;set;}
}

然而这不起作用。

然后我将DataContract属性应用于ParentData类,但是这会在客户端应用程序中创建两个我不想要的存根类。

有没有办法告诉序列化程序它应该将继承扁平化为子类的继承,即ChildData

2 个答案:

答案 0 :(得分:1)

我相信您的ParentData课程还需要 [DataContract] 属性:

[DataContract]
public class ParentData
{
  [DataMember]
  public string Title{get;set;}
}

[Serializable]对使用默认数据协定序列化程序的WCF没有帮助。

答案 1 :(得分:0)

我相信您的ParentData类应该标记为abstract,并且还需要具有[DataContract]属性:

[DataContract]
public abstract class ParentData
{
  [DataMember]
  public string Title{get;set;}
}

正如marc所说,[Serializable]对使用默认数据协定序列化程序的WCF没有任何帮助。