Esiste un modo per scegliere i valori predefiniti degli attributi che non si trovano nel file xml durante la deserializzazione?
Se l'attributo mAge
non è presente nel file xml, voglio utilizzare un valore predefinito di 18. È possibile?DataContract, valore DataMember predefinito
[DataContract]
public class Person
{
public Person()
{
}
[DataMember(Name = "Name")]
public string mName { get; set; }
[DataMember(Name = "Age")]
public int mAge { get; set; }
[DataMember(Name = "Single")]
public bool mIsSingle { get; set; }
};
Modifica per inserire la risposta.
[DataContract]
public class Person
{
public Person()
{
}
[DataMember(Name = "Name")]
public string mName { get; set; }
[DataMember(Name = "Age")]
public int? mAge { get; set; }
[DataMember(Name = "Single")]
public bool? mIsSingle { get; set; }
[System.Runtime.Serialization.OnDeserialized]
void OnDeserialized(System.Runtime.Serialization.StreamingContext c)
{
mAge = (mAge == null ? 18 : mAge); // 18 is the default value
}
}
Posso usare la tua risposta se voglio sovrascrivere il valore di un oggetto, perché quando il riferimento è impostato su null so che l'attributo non è presente nel file xml. Ma come posso sapere se un attributo booleano o int è presente nel file xml? Se il valore per un bolean è impostato su false o un int è impostato su 0. Non riesco a distinguere tra attributo e attributo non impostato impostato su valore C# predefinito. – BuzBuza
Poiché la deserilizzazione proverà a impostare valori predefiniti per i dati mancanti in una determinata struttura, quindi l'unica opzione è verificare i valori validi, ad es. Come ho aggiornato la mia risposta e verificato se mAge == 0 quindi impostare il valore. –
È possibile utilizzare i tipi nullable per aggirare int e null, controllare le mie ans aggiornate –