我有一个返回动物数组的服务,但列表中可以包含猫,狗等,这些都可以扩展动物。我知道我需要分别使用KnownType或ServiceKnownType属性,以及实体类或服务类。
2个属性有什么区别?我更喜欢ServiceKnownType,因为它应用于服务,正好在需要和调用的地方,而不是在我的实体上应用的KnownType。对我来说,在实体类上应用它意味着要知道如何使用我的实体类。
现在我把它放在我的实体上,它就像一个魅力,但我在这里寻求关于最佳实践和实用性的指导。
答案 0 :(得分:41)
他们最终做同样的事情 - 但是在不同的范围内。
[ServiceKnownType]
为此服务上的所有方法定义类层次结构,或者为服务定义单个方法(取决于您放置属性的位置)。因此,在这种情况下,此类型层次结构仅对此服务有效且适用,甚至可能只是该服务合同中的单个方法。
[KnownType]
做同样的事情 - 但是在基础数据合同上。任何将使用此数据协定的服务现在也“继承”所有潜在的后代类 - 这些类可能是您想要的,也可能不是。
所以真的 - 这只是你想要应用给定声明的范围的问题 - 将它放在数据协定上使它成为一种“全局”类型的层次结构,而使用[ServiceKnownType]
允许你定义只对一个服务合同有效的东西,或者甚至只对该服务合同中的一个(或几个)方法有效。