c # – ¿Cuándo es apropiado usar el atributo KnownType?

Después de leer la referencia de MSDN, todavía tengo preguntas sobre cuándo usar el atributo KnownType. Entiendo que el atributo comunica información de tipo al serializador, pero ¿cuándo es necesario? ¿Es apropiado cuando la clase que se está serializando tiene referencias de un tipo de clase base y hay clases derivadas de conversión ascendente que podrían establecerse en esas referencias?

Además, ¿hay algún inconveniente en el uso excesivo del atributo? Por ejemplo, en el ejemplo anterior, si la clase serializada se marcó con KnownType (baseClass) aunque hubiera una referencia explícita a ese tipo?

Se necesita [KnownType] para informarle acerca de los subtipos. La desventaja de no usarlo es que lo siguiente no funcionará:

[DataContract]
class Foo {}

[DataContract]
class Bar : Foo {}

con un método en la interfaz WCF que devuelve:

public Foo GetFoo() { return new Bar(); }

Sin el atributo, el serializador (especialmente para los tipos generados por mex / proxy) no sabrá sobre Bar y fallará. Con el atributo:

[DataContract, KnownType(typeof(Bar))]
class Foo {}

funcionará. Esto solo se aplica a DataContractSerializer; con NetDataContractSerializer usted obtiene los datos de tipo de una manera diferente.

Dirección original:https://stackoverflow.com/questions/3167932/when-is-it-appropriate-to-use-the-knowntype-attribute

Por favor indique la dirección original:c # – ¿Cuándo es apropiado usar el atributo KnownType?