1

我有一些使用继承的对象类。似乎我只能访问服务直接使用的对象。让我向您展示我要完成的工作:

[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 时,这些对象都会被序列化。不暴露未开始使用的东西确实有意义,因为我可以看到暴露您可能不需要的项目的问题。公开服务不直接使用的对象的最佳方法是什么?谢谢

丹尼尔

4

2 回答 2

1

您应该使用KnownType 属性装饰 object2(类的特殊名称:)):

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

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

public class object3: object2
{
}
于 2009-04-06T20:14:17.450 回答
-1

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

于 2009-04-06T20:11:33.617 回答