Is there a way to choose default values of attributes that are not in the xml file during deserialization?
If the mAge
attribute is not present in the xml file, I want to use a default value of 18. Is it possible ?
[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; }
};
Edit to put the answer.
[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
}
}
You can use [OnDeserialized]
EDIT: From your Comments
For bool or int you can use nullable bool and nullable int so if these age and Single attributes are missing in xml file then they will be null as well.
here is quick sample I prepared
This should work.
Take a look at this page.
use [OnDeserializing()]
and you set your values BEFORE the deserialization. So there is no check necessary, which could go wrong - what if the mAge was serialized to be 0?