暴露对象(DataContracts),可能不是直接使用的WCF服务?
-
05-09-2019 - |
题
我有一些对象类使用的继承。似乎我只能得到访问的对象是直接使用的一个服务。让我告诉你什么是我试图完成的:
[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
{
}
其他提示
我相信你回答了你自己的问题。如果成员不是正在使用的服务,那么你不应该揭露他们。它始终是更好地暴露的最小集由服务所需要的数据,因为它通常会增加服务的可维护性。
不隶属于 StackOverflow