【发布时间】:2013-03-19 02:11:57
【问题描述】:
我想反序列化以下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.
这是因为您不能简单地反序列化可空类型。 我在互联网上找到了多种解决方案来解决这个问题。但是它们看起来不太好,您必须为此编写大量代码。
有什么优雅的解决方案吗?反序列化可空类型的最佳做法是什么?
【问题讨论】:
-
看看这个问题 - stackoverflow.com/questions/3250706/… - 关于实现 IXmlSerializable 并自己做的答案
-
@Axarydax,我必须同意,这实际上是唯一的方法。
标签: c# .net xml-serialization nullable