我有一些对象类使用的继承。似乎我只能得到访问的对象是直接使用的一个服务。让我告诉你什么是我试图完成的:

[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在服务上,要素※1变化。但我可能需要有object3暴露于某种原因。它可能是一个源类,我要通过使其类型,可以确定以后为另一个进程。我看不到这个目的获得序列化。我认为只要你设置DataContract/数据成员的那些对象将会获得序列化。它不会有意义,不要让的东西是不是开始使用,因为我可以看到的问题暴露出项目,你可能不需要。什么是最好的方式让对象,不是直接使用的服务?感谢

丹尼尔

有帮助吗?

解决方案

你应该装饰object2(奇怪的名字为一类:))的 KnownType属性:

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

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

public class object3: object2
{
}

其他提示

我相信你回答了你自己的问题。如果成员不是正在使用的服务,那么你不应该揭露他们。它始终是更好地暴露的最小集由服务所需要的数据,因为它通常会增加服务的可维护性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top