que tienen estas clases:WCF - problema tomando con la serialización de tipos heredados
[DataContract]
public class ErrorBase {}
[DataContract]
public class FileMissingError: ErrorBase {}
[DataContract]
public class ResponseFileInquiry
{
[DataMember]
public List<ErrorBase> errors {get;set;};
}
Una instancia de la clase ResponseFileInquiry es lo que mi método de servicio devuelve al cliente. Ahora, si completo ResponseFileInquiry.errors con instancias de ErrorBase, todo funciona bien, pero si añado una instancia de tipo hereditario FileMissingError, recibo una excepción lado del servicio durante la serialización:
Type 'MyNamespace.FileMissingError' with data contract name 'FileMissingError'
is not expected. Add any types not known statically to the list of known types -
for example, by using the KnownTypeAttribute attribute or by adding them to the
list of known types passed to DataContractSerializer.'
Así serializador se está confundido porque está esperando que la Lista contenga los objetos de tipo declarados (ErrorBase) pero obtiene objetos de tipo heredado (FileMissingError).
Tengo todo el montón de tipos de error y la lista contendrá combinaciones de ellos, así que ¿qué puedo hacer para que funcione?
Gracias, la entrada del blog tiene todas las formas posibles de declarar tipos conocidos. – Andrey
En mi caso, usar KnownType no ayuda mucho ya que el tipo proviene de un ensamblaje separado al que no hago referencia. Otros desarrolladores están ampliando la clase que tengo para mi DataContract para agregar algunas propiedades. ¿Qué pasa si solo quisiera descartar cualquier clase derivada y usar la clase base? – brendonparker
Esta es la solución que tuve que usar: http: // stackoverflow.com/a/8414390/2460073 Nota: tuve que aplicar el cliente DataContractSerializer a ClientBase – brendonparker