Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XmlSerializer to deserialize decimal with comma(,) decimal symbol

I'd like to know if there is any simple way to deserialize decimal with comma decimal separator using XmlSerialier? I'am getting exported data in xml format from other software and all numbers(price, quantity, discount and many many more) in xml file has comma as decimal separator.

Here is simplified example what I have tried to do:

Lets say there is Product class with Name and Price:

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

and I have xml...

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

when I'am trying to deserialize that xml...

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

I'am getting error There is an error in XML document (1, 57).

Everythig works fine, when Price in xml is 3.50.

I know i could change Price propertie to sting and TryParse decimal, but maybe there is better solution (for example switch culture)?

Any suggestions, solutions and comments are appreciated.

UPDATE: Forgot to mention that my current culture settings already using comma as decimal symbol.

like image 853
Renatas M. Avatar asked May 24 '11 20:05

Renatas M.


1 Answers

I doubt there is a built-in way because XML documents with numbers that don't use period are not XML documents :) OTOH, this answer has quite a few possible solutions:

Summing numbers with comma as decimal separator in XSLT?

like image 165
500 - Internal Server Error Avatar answered Oct 08 '22 14:10

500 - Internal Server Error