c # – DataContract con herencia?

Tengo una clase con una lista de objetos que está serializada y deserializada:

[DataContract]
public class Manager
{
  [DataMember]
  public BigBase[] enemies;
}

La clase con subclases:

[DataContract]
[KnownType(typeof(Medium))]
[KnownType(typeof(Small))]
public class BigBase
{
    [DataMember]
    public bool isMoving;
}
[DataContract]
public class Medium : BigBase
{
}
[DataContract]
public class Small: BigBase
{
}

Ahora, lo que es extraño al deserializar la matriz de enemigos contendrá clases BigBase deserializadas correctamente, pero cada clase Media y Pequeña no tiene el valor correcto para isMoving.

Mejor respuesta
Debe poner el atributo KnownType en el Administrador:

[DataContract]
[KnownType(typeof(Medium))]
[KnownType(typeof(Small))]
public class Manager
{
  [DataMember]
  public BigBase[] enemies;
}

Porque es el Administrador el que tiene una matriz de BigBase cuyos elementos también podrían ser las clases derivadas. Por lo tanto, el DataContractSerializer sabrá qué esperar de la matriz al serializar y deserializar el objeto Manager (y todo es DataMember).

Por favor indique la dirección original:c # – DataContract con herencia? - Código de registro