Ho una classe base con le proprietà DataMember in esso. Ho anche una classe derivata con le proprietà DataMember in essa. Nel mio progetto WCF sto restituendo la classe derivata. C'è un modo per impedirmi di serializzare un membro della mia classe base? Ecco alcuni esempi di codice:WCF DataContract Escludere DataMembers da essere serializzato in classi derivate
public class BaseClass
{
public string ShortDescription {get;set;}
public string LongDescription {get;set;}
}
public class DerivedClass : BaseClass
{
public List<Description> Descriptions {get;set;}
}
In questo codice voglio essere in grado di nascondere i membri ereditati shortDescription e longdescription perché sono ormai obsolete. Qualsiasi tentativo di farlo non ha avuto successo. Ecco quello che ho provato:
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;}
}
e
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;}
}
Nessuno di questi approcci hanno lavorato. Il tipo "DerivedClass" quando viene inviato al WSDL contiene ancora i membri "Ignored" del tipo di classe base.
Ci si potrebbe chiedere perché non sto solo cambiando la classe base. Questo perché utilizzo ancora la classe base nella sua forma originale come versione precedente del tipo per WSDL per supportare la retrocompatibilità per i consumatori. In questo modo posso avere una chiamata v1000 che restituisce BaseClass e una chiamata V1010 che restituisce un DerivedClass. Posso aggiungere e modificare le funzionalità di DerivedClass tutto ciò che voglio senza il potenziale per influenzare i consumatori della funzionalità v1000.
Questo produce lo stesso risultato. È interessante notare che se eseguo l'override e fornisco l'attributo [DataMember] nel tentativo di farlo visualizzare nella definizione XML per DerivedClass, esso non viene ancora visualizzato in DerivedClass ma nella classe base. – omatase
Hrmmpf ... sì, che non funziona;) – Kwal