[KnownType]
необходимо, чтобы рассказать о подтипах.Недостаток использования не состоит в том, что следующее не будет работать:
[DataContract]
class Foo {}
[DataContract]
class Bar : Foo {}
с методом на интерфейсе WCF, который возвращает:
public Foo GetFoo() { return new Bar(); }
Безатрибут, сериализатор (особенно для сгенерированных mex / proxy типов) не будет знать о Bar
, и произойдет сбой.С атрибутом:
[DataContract, KnownType(typeof(Bar))]
class Foo {}
он будет работать.Это относится только к DataContractSerializer
- с NetDataContractSerializer
вы получаете данные типа другим способом.