2011-05-24 32 views
2

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

下面是简单的例子就是我试图做:

比方说,有产品类名称和价格:

[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)。

当Price in xml是3.50时Everythig可以正常工作。

我知道我可以将价格特性更改为sting和TryParse十进制,但也许有更好的解决方案(例如切换文化)?

任何建议,解决方案和意见表示赞赏。

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

回答

3

我怀疑有一个内置的方式,因为与不使用周期数的XML文档不是XML文档:) OTOH,这个答案有不少可能的解决方案:

Summing numbers with comma as decimal separator in XSLT?

+0

是我知道xml standarts说dot是十进制符号,但事实是,我得到了基于xml文件的非standarts。因此,我正在寻找解决方法...感谢链接,我会检查它。 – Reniuz 2011-05-24 20:36:27