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).
Artículos relacionados
- c # - Interfaz de WCF DataContract vs DataContract
- c #: escriba un método de servicio web con los parámetros de clase URI y DataContract
- c # - Portable Class Library no tiene funciones DataContract o Serialización con .NET 4.6
- c # - DataContract, valor predeterminado de DataMember
- c # - Espacio de nombres para [DataContract]
- c # - muestra JSON a [DataContract]
- ¿Cómo hago para que Linux reconozca una nueva unidad SATA/dev/sda que intercambié en caliente sin reiniciar?
- c # - ¿Agregar [DataContract] y [DataMember] a todas las clases afecta el rendimiento?
Por favor indique la dirección original:c # – DataContract con herencia? - Código de registro