Я десериализации следующий XML:Лучшие практики для десериализации обнуляемых типов
<Root>
<Order>
<Id>12</Id>
<Date>2013-03-28T16:12:45</Date>
<Number></Number>
<Amount></Amount>
</Order>
</Root>
Мой класс похож на это:
[XmlType("Order")]
public class ImportOrder
{
[XmlElement("Id")]
public int OrderId { get; set; }
[XmlElement("Date")]
public DateTime OrderDate { get; set; }
[XmlElement("Number")]
public string OrderNumber { get; set; }
[XmlElement("Amount", IsNullable = true)]
public decimal? OrderAmount { get; set; }
}
десериализатор я использую:
public List<T> DeserializeList<T>(string filePath, string rootName)
{
var itemList = new List<T>();
if (File.Exists(filePath))
{
var serializer = new XmlSerializer(typeof(List<T>), new XmlRootAttribute(rootName));
TextReader reader = new StreamReader(filePath);
itemList = (List<T>)serializer.Deserialize(reader);
reader.Close();
}
return itemList;
}
Он отлично работает, когда все данные заполняются в xml. Если Number
пуст, все в порядке. Но когда Amount
пусто я получаю исключение:
Input string was not in a correct format.
Это потому, что вы не можете просто десериализации обнуляемых типов. Я нашел несколько решений в Интернете, чтобы решить эту проблему. Но они выглядят не очень хорошо, и для этого вам нужно написать много кода.
Есть ли элегантное решение? Каковы наилучшие методы десериализации типов NULL?
Посмотрите на этот вопрос - http://stackoverflow.com/questions/3250706/xmlserializer-and-nullable-attributes - ответ о внедрении IXmlSerializable и сделайте это самостоятельно – Axarydax
@Axarydax, я должен согласиться с этим, это эффективно единственный путь. –