25

我有一个返回动物数组的服务,但列表可以包含猫、狗等,它们都扩展了动物。我知道我需要分别在实体类或服务类上使用 KnownType 或 ServiceKnownType 属性。

2个属性有什么区别?我更喜欢 ServiceKnownType,因为它应用于服务,正是需要和调用它的地方,而不是应用于我的实体的 KnownType。对我来说,将它应用于实体类意味着提前知道我的实体类是如何被使用的。

现在我把它放在我的实体上,它就像一个魅力,但我在这里寻找关于最佳实践和有用性的指导。

4

1 回答 1

43

他们最终做同样的事情 - 但在不同的范围内。

[ServiceKnownType]为此服务上的所有方法或服务上的单个方法定义类层次结构(取决于放置属性的位置)。所以在这种情况下,这种类型层次结构将只对这个服务有效和适用,或者甚至可能只是那个服务合同中的一个方法。

[KnownType]做同样的事情 - 但在基础数据合同上。任何将使用此数据契约的服务现在也“继承”所有那些潜在的后代类 - 这可能是您想要的,也可能不是您想要的。

所以真的 - 这只是你想要应用给定声明的范围的问题 - 将它放在数据合同上使它成为一种“全局”类型层次结构,而 using[ServiceKnownType]允许你定义仅对一个服务合同有效的东西甚至只是该服务合同上的一种(或几种)方法。

于 2010-03-16T16:28:48.877 回答