Tengo una clase base con propiedades DataMember. También tengo una clase derivada con propiedades de DataMember. En mi proyecto WCF estoy devolviendo la clase derivada. ¿Hay alguna manera de evitar que un miembro de mi clase base se serialice? Aquí hay un código de ejemplo:WCF DataContract Excluir DataMembers de Ser serializados en clases derivadas
public class BaseClass
{
public string ShortDescription {get;set;}
public string LongDescription {get;set;}
}
public class DerivedClass : BaseClass
{
public List<Description> Descriptions {get;set;}
}
En este código Quiero ser capaz de ocultar los miembros heredados shortDescription y longdescription porque ahora son obsoletos. Cualquier intento de hacerlo ha sido infructuoso. Esto es lo que he intentado:
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// override the base class members
[IgnoreDataMember]
public override string ShortDescription {get;set;}
[IgnoreDataMember]
public override string LongDescription {get;set;}
}
y
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// shadow the base class members
[IgnoreDataMember]
public new string ShortDescription {get;set;}
[IgnoreDataMember]
public new string LongDescription {get;set;}
}
Ninguno de estos enfoques han funcionado. El tipo "DerivedClass" cuando se envía a WSDL todavía contiene los miembros "Ignorados" del tipo de clase base.
Puede preguntarse por qué no estoy cambiando la clase base. Esto se debe a que todavía utilizo la clase base en su forma original como la versión anterior del tipo para que el WSDL admita la compatibilidad con versiones anteriores para los consumidores. De esta manera puedo tener una llamada v1000 que devuelve BaseClass y una llamada V1010 que devuelve una DerivedClass. Puedo agregar y cambiar la funcionalidad de DerivedClass todo lo que quiero sin el potencial de afectar a los consumidores de la funcionalidad de v1000.
Esto produce el mismo resultado. Curiosamente, si realizo la anulación y proporciono el atributo [DataMember] en un intento de mostrarlo en la definición XML de DerivedClass, aún no aparece en DerivedClass, sino en la clase base. – omatase
Hrmmpf ... sí, eso no funciona;) – Kwal