DeSerialize null值

时间:2012-03-01 20:55:15

标签: c# xml xmlserializer

我正在尝试将xml文件序列化为一个元素可以为空的类

XML文件

  <Status StatusId="1">
    <StatusName>Not inspected</StatusName>
    <Acute></Acute>
  </Status>
  <Status StatusId="2">
    <StatusName>Acute</StatusName>
    <Acute>1</Acute>
  </Status>

班级

 private int _acute;
         public int Acute
         {
             get { return _acute; }
             set
             {       
                   _acute = value;
                    NotifyPropertyChanged("Acute");

             }
         }

我试过int?和[XmlElement( IsNullable = true )]但没有任何人知道如何在没有任何错误的情况下阅读空的elemet。

2 个答案:

答案 0 :(得分:1)

我猜这不是正确的方式,但我过去通过处理从stringint的转换处理了这个问题。 。大致是:

 private int _acute = 0; // or assign to some more appropriate default
 [XmlIgnore]
 public int Acute
 {
     get { return _acute; }
     set
     {       
           _acute = value;
           NotifyPropertyChanged("Acute");
     }
 }
 // I kept mine as public but may be able to hide it at a minimal level that
 // serialization still works.
 [XmlElement(ElementName = "Acute")]
 public string SerializedAcute
 {
     get { return _acute.ToString(); }
     set
     {   
         Int32.TryParse(value, out _acute)
     }
 }

如果你有很多这些,虽然它可能有点难看。

答案 1 :(得分:0)

尝试使用急性int?。 Int不能包含null,可以为空的int(int?s)可以。

编辑:注意自我 - 在回复之前阅读所有内容。

也许你的问题是<Acute>实际上并没有从XML中遗漏,它存在但是有一个空值,它不会转换为任何int?尝试从XML中删除<Acute></Acute>行,并将属性更改回int?