公开可能不被WCF服务直接使用的对象(DataContracts)?

时间:2009-04-06 20:06:28

标签: .net wcf .net-3.5 datacontractserializer

我有一些使用继承的对象类。似乎我只能访问服务直接使用的对象。让我告诉你我想要实现的目标:

[DataContract]
public class Object1
{
   [DataMember]
   int Id {get; set;}
}

[DataContract]
public class object2: Object1
{
   [DataMember]
   string Name {get; set;}
}

[DataContract]
public class object3 
{
    [DataMember]
    int SomeNumber {get; set;}
}

服务:

public int GetId(object2 obj)
{
    return GetTheId(object2.Name);
}

现在因为我在服务中使用object2,所以object1也被序列化了。然而,我可能想要因为某些原因而暴露object3。它可能是我必须传递的派生类,以便稍后可以为另一个进程确定其类型。我没有看到这个对象被序列化。我假设每当你设置DataContract / DataMember时,这些对象都会被序列化。不暴露未开始使用的东西是有道理的,因为我可以看到暴露你可能不需要的物品的问题。公开不直接由服务使用的对象的最佳方法是什么?感谢

丹尼尔

2 个答案:

答案 0 :(得分:1)

你应该用KnownType attribute装饰object2(一个类的特殊名称:)):

[DataContract]
[KnownType(typeof(object3))]
public class object2 
{
}

假设你的意思是object3是object2的子类:

public class object3: object2
{
}

答案 1 :(得分:-1)

我相信你回答了自己的问题。如果服务没有使用成员,那么您不应该公开它们。公开服务所需的最小数据集总是更好,因为它通常会提高服务的可维护性。