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

Ren*_*iuz 6 c# xml decimal xml-serialization

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

这是我尝试做的简化示例:

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

[Serializable]
public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有 xml ...

string xmlExample = "<Product><Name>Coca Cola, 2L</Name><Price>3,50</Price></Product>";
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

500*_*ror 7

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

在 XSLT 中用逗号作为小数分隔符求和数字?