2010-03-21 2 views
1

У меня есть веб-сервис третьей стороной, которая возвращает этот XMLОбработка FormatExceptions с использованием XmlSerializer.Deserialize

<book> 
    <release_date>0000-00-00</release_date> 
</book> 

Я пытаюсь десериализации его в этот класс

public class Book 
{ 
    [XmlElement("release_date")] 
    public DateTime ReleaseDate { get; set; } 
} 

Но поскольку 0000-00-00 не valid DateTime, я получаю исключение FormatException. Каков наилучший способ справиться с этим?

ответ

3

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

public class Book 
{ 
    [XmlElement("release_date")] 
    public string ReleaseDate { get; set; } 

    public DateTime? GetReleaseDate 
    { 
     get 
     { 
      // parse ReleaseDate datetime string 
      // return the value; or null if the string contains invalid datetime. 
     } 
    } 
} 
+0

третья сторона не .net поэтому не обязательно в DateTime, следовательно, 0000-00-00. Строковый подход, который вы предложили, - это то, что я также сделал, но он чувствует себя взломанным и надеется, что может быть более чистое решение. – kenwarner

+0

Какой тип release_дата описан в WSDL? строка? или нет WSDL, в этом случае его следует сначала десериализовать как строку, а затем применить свою собственную логику, я боюсь. –

2
public class Book 
{ 
    [XmlElement("release_date")] 
    public string StringReleaseDate 
    { 
     get {return ReleaseDate.ToString("yyyy-MM-dd");} 
     set {ReleaseDate = DateTime.ParseExact(value, "yyyy-MM-dd");} 
    } 

    [XmlIgnore] 
    public DateTime ReleaseDate {get;set;} 
} 
Смежные вопросы