Sto utilizzando un DataContractJsonSerializer e ho un problema con il Nome DataMember.Serialization DataMember (name) override issue
Ho creato una classe base e diverse classi derivate. Ho bisogno delle classi derivate perché ho diverse stringhe json. Voglio deserializzare le stringhe JSON e quindi ho bisogno di nomi diversi per i datamembers. Io cerco di cambiare il nome DataMember come nel seguente esempio:
BaseClass:
[DataContract]
public abstract class BaseClass
{
[DataMember]
public virtual string FirstMethod { get; protected set; }
}
classe derivata:
[DataContract]
[KnownType(typeof(BaseAccess))]
public class DerivedClass
{
[DataMember(Name="first_method")]
public virtual string FirstMethod { get; protected set; }
}
Il problema è che quando uso una classe derivata la serializzazione sembra ignorare il nome DataMember specificato. Quindi, quando deserializzo con il tipo DerivedClass, la serializzazione sembra avvenire con il nome "FirstMethod" (della classe base) anziché "first_method" (della classe derivata). È possibile utilizzare il nome DataMember della classe derivata (che è diversa per diverse classi derivate nella mia situazione).
Un'altra domanda. Ho trovato esempi con KnownType aggiunto alla classe base e aggiunto alla classe derivata. Sembra logico per me farlo sulla classe derivata (specialmente per problemi di ereditarietà). Cosa è corretto?
Si noti che per evitare di creare due campi in JSON, sarà necessario rimuovere l'attributo [DataMember] dalla proprietà nella classe base. –