Search code examples
c#localizationxml-serialization

How to define the culture that the XmlSerializer uses


I am deserializing a xml-configuration file using the following code:

// Create object by deserializing the given xml document
var serializer = new XmlSerializer(typeof(ConfigurationFile));
var stream = File.Open(path, FileMode.Open, FileAccess.Read);
var configFile = serializer.Deserialize(stream);

In the configuration I have some floating numbers defined as following:

DailyThreshold="41.9"

As the decimal separator "." is culture dependent I am wondering how I can define the culture the serializer uses to parse these numbers?


Solution

  • If you use XmlSerializer for both serializing and deserializing you have no reason to worry about culture: the serializer doesn't care about culture, neither it changes the serialized data in any way.

    The data is alwasy serialized with the same format, which has nothing to do with any culture settings (nor UI culture, nor thread culture, nor any kind of culture).

    Evidence in MSDN docs

    I wrote this without looking for evidences simply because XML is a format for exchanging data between different systems and platforms, so the serialization format and deserialization parse must be equal in all the systems.

    However, if you dive into MSDN docs, you can read this:

    The majority of the methods found in an XmlConvert class are used to convert data between strings and strongly-typed formats. Methods are locale independent. This means that they do not take into account any locale settings when doing conversion.

    on Conversion of XML Data Types.