alg*_*eat 5 .net c# nullable xml-serialization
我想反序列化以下xml:
<Root>
<Order>
<Id>12</Id>
<Date>2013-03-28T16:12:45</Date>
<Number></Number>
<Amount></Amount>
</Order>
</Root>
Run Code Online (Sandbox Code Playgroud)
我的课与此类似:
[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; }
}
Run Code Online (Sandbox Code Playgroud)
我使用的反序列化器:
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;
}
Run Code Online (Sandbox Code Playgroud)
当所有数据都填入xml时,它工作正常。如果Number为空也可以。但是当Amount为空时,我得到异常:
Input string was not in a correct format.
Run Code Online (Sandbox Code Playgroud)
这是因为您不能简单地反序列化可空类型。我在互联网上找到了多种解决方案来解决此问题。但是它们看起来不太好,因此您必须编写很多代码。
有什么优雅的解决方案吗?反序列化可空类型的最佳实践是什么?
小智 0
是否有特定的需要以您现有的特定方式获取 XML?
我问这个问题是因为如果您已经告诉 XML 反序列化器元素 Amount 可为空,则意味着该元素可能存在也可能不存在。因此,如果您要生成 XML,则只需避免生成此元素即可。
你可以看到,如果你有一个这样的文件:
<Root>
<Order>
<Id>12</Id>
<Date>2013-03-28T16:12:45</Date>
<Number></Number>
</Order>
</Root>
Run Code Online (Sandbox Code Playgroud)
然后你用你的代码解析它,它就会起作用。
| 归档时间: |
|
| 查看次数: |
2860 次 |
| 最近记录: |