XmlSerializer用逗号(,)十进制符号反序列化十进制

时间:2011-05-24 20:20:18

标签: c# xml xml-serialization decimal

我想知道是否有使用XmlSerialier以逗号小数分隔符反序列化十进制的简单方法? 我从其他软件获取xml格式的导出数据,xml文件中的所有数字(价格,数量,折扣等等)都有逗号作为小数点分隔符。

以下是我尝试过的简化示例:

假设有名称和价格的产品类:

[Serializable]
public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

我有xml ...

string xmlExample = "<Product><Name>Coca Cola, 2L</Name><Price>3,50</Price></Product>";

当我试图反序列化那个xml ...

XmlSerializer serializer = new XmlSerializer(typeof(Product));
StringReader stringReader = new StringReader(xmlExample);
Product product = serializer.Deserialize(stringReader) as Product; //<-- Error here

我收到错误 XML文档中存在错误(1,57)。

当xml中的价格为3.50时,Everythig工作正常。

我知道我可以将Price propertie改为sting和TryParse decimal,但也许有更好的解决方案(例如切换文化)?

任何建议,解决方案和评论都表示赞赏。

更新 忘记提及我当前的文化设置已经使用逗号作为小数符号。

1 个答案:

答案 0 :(得分:3)

我怀疑是否存在内置方式,因为带有不使用句点的数字的XML文档不是XML文档:) OTOH,这个答案有很多可能的解决方案:

Summing numbers with comma as decimal separator in XSLT?