DeSerialize нулевые значения - PullRequest
2 голосов
/ 02 марта 2012

Я пытаюсь сериализовать 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");

             }
         }

Iпробовал int?и [XmlElement( IsNullable = true )] но ничего не работает, кто-нибудь знает, как читать в пустом элементе, не получая ошибок.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Я предполагаю, что это не правильный способ сделать это, но я занимался этим в прошлом, обрабатывая преобразование из string в int сам.Грубо говоря:

 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)
     }
 }

Если у вас их много, это может показаться уродливым.

0 голосов
/ 02 марта 2012

Попробуйте сделать Acute int?. Ints не могут содержать нулевые, допускаемые с нулем int (int? S).

РЕДАКТИРОВАТЬ: Примечание для самостоятельного прочтения, прежде чем ответить.

Возможно, ваша проблема в том, что <Acute> на самом деле не отсутствует в XML, он есть, но с пустым значением, которое не переводится ни в один int? Попробуйте удалить строку <Acute></Acute> из XML и изменить свойство обратно на int? .

...