如何定义XmlSerializer使用的文化

时间:2014-01-15 14:38:14

标签: c# localization xml-serialization

我使用以下代码反序列化xml配置文件:

// 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);

在配置中,我有一些浮动数字定义如下:

  

DailyThreshold = “41.9”

作为小数点分隔符“。”是文化依赖我想知道如何定义序列化程序用来解析这些数字的文化?

2 个答案:

答案 0 :(得分:4)

如果您使用XmlSerializer进行序列化和反序列化,则无需担心文化:序列化程序不关心文化,也不会以任何方式更改序列化数据。

数据是以相同的格式序列化的,与任何文化设置(UI文化,线程文化,也不是任何文化)无关。

MSDN文档中的证据

我在没有查找证据的情况下写这篇文章只是因为XML是一种在不同系统和平台之间交换数据的格式,因此序列化格式和反序列化解析在所有系统中都必须相同。

但是,如果您深入了解MSDN文档,可以阅读:

  

XmlConvert类中的大多数方法用于在字符串和强类型格式之间转换数据。方法与语言环境无关。这意味着他们在进行转换时不会考虑任何区域设置。

on Conversion of XML Data Types

答案 1 :(得分:0)

XmlSerializer类使用操作系统的格式配置,它在region部分中配置,为了使程序使用特定格式,您可以直接将其分配给Thread,如下所示。例如,如果您居住在拉丁美洲国家,则非常普遍。它是标准的表示形式。

//Write this code at the begining of the program 
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = "."; //Force use . insted of ,
System.Threading.Thread.CurrentThread.CurrentCulture = culture;