Czy istnieje możliwość wyboru domyślnych wartości atrybutów, których nie ma w pliku xml podczas deserializacji?
Jeśli atrybutu mAge
nie ma w pliku xml, chcę użyć wartości domyślnej 18. Czy jest to możliwe?DataContract, domyślna wartość DataMember
[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; }
};
Edytuj, aby umieścić odpowiedź.
[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
}
}
Mogę użyć twojej odpowiedzi, jeśli chcę przesłonić wartość obiektu, ponieważ gdy odwołanie ma wartość null, wiem, że atrybut nie występuje w pliku xml. Ale skąd mogę wiedzieć, czy w pliku xml znajduje się boolean lub int attribut? Jeśli wartość dla bolean jest ustawiona na false lub int jest ustawiona na 0. Nie mogę rozróżnić między nie ustawionymi atrybutami i atrybutami ustawionymi na domyślną wartość C#. – BuzBuza
Jako dezynfekcja spróbuje ustawić domyślne wartości brakujących danych w danej strukturze, więc jedyną opcją jest sprawdzenie poprawnych wartości, np. Gdy zaktualizowałem swoją odpowiedź i sprawdziłem, czy wiek mA == 0, następnie ustaw swoją wartość. –
Możesz używać typów nullable, aby ominąć int i null, sprawdź mój zaktualizowany ans –