有没有一种方法可以选择在反序列化过程中不在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