У меня есть сервис, который возвращает массив животного, но список может содержать кошек, собак, и т.д., который все расширяют животное. Я знаю, что должен использовать или атрибут KnownType или ServiceKnownType, и на классе объекта или классе обслуживания, соответственно.
Каково различие между 2 атрибутами? Я предпочитаю ServiceKnownType, потому что он применяется на сервис, точно где он необходим и требуется, в противоположность KnownType, который применяется на мой объект. Мне применяющий его на класс объекта означает знать слишком далеко впереди, как мой класс объекта используется.
На данный момент у меня есть он на моем объекте, и это работает как очарование, но я ищу руководство здесь относительно лучших практик и полноценности.
В конечном итоге они делают то же самое, но в другом объеме.
[ServiceKnownType]
определяет иерархию классов для всех методов в этой службе или для одного метода в службе (в зависимости от того, где вы поместили атрибут). Таким образом, в этом случае эта иерархия типов будет действительна и применима только для этой службы или, возможно, даже для одного метода в этом контракте службы.
[KnownType]
делает то же самое, но с базовыми контрактами данных. Любая служба, которая будет использовать этот контракт данных, теперь также «наследует» все эти потенциальные классы-потомки - которые могут быть, а могут и не быть тем, что вы хотите.
На самом деле - это просто вопрос того, к какой области вы хотите применить данное объявление - включение его в контракт данных делает его своего рода «глобальным» типом иерархии, при использовании [ServiceKnownType]
позволяет вам определить что-то, что действительно только для одного контракта службы или даже только для одного (или нескольких) методов в этом контракте службы.