有沒有一種方法可以選擇在反序列化過程中不在xml文件中的屬性的默認值?
如果mAge
屬性不存在於xml文件中,我想使用默認值18.是否有可能?DataContract,默認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; }
};
編輯要放的答案。
[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
}
}
如果我想覆蓋一個對象的值,我可以使用你的答案,因爲當引用設置爲null時,我知道attribut不存在於xml文件中。但是我怎麼能知道XML文件中是否存在布爾型或int型屬性?如果一個布爾值的值被設置爲false或者一個int值被設置爲0,那麼我就不能將無用的attribut和attribut分配給默認的c#值。 – BuzBuza 2011-12-19 20:48:39
由於deserilization會嘗試爲給定結構中的缺失數據設置默認值,所以您唯一的選擇是檢查有效值,例如我更新了我的答案並檢查年齡是否爲0,然後設置您的值。 – 2011-12-19 20:58:14
你可以使用可爲空的類型來解決int和null,plz檢查我更新的ans – 2011-12-19 21:21:32