C# - XElement和文化

Adr*_*uet 1 .net c# xelement culture

我遇到了XElement和Culture的问题.

我的当地文化是法国人.浮动值使用逗号而不是点编写.

Console.WriteLine(1.1d);
//1,1
Run Code Online (Sandbox Code Playgroud)

但是,当我在XElement中放入一个double时,它以美国格式存储.

XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
Console.WriteLine(myXmlElement.Value);
//1.1
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试解析我的XElement的值时,我得到一个FormatException.

XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
double myDouble = double.Parse(myXmlElement.Value);
//Throws a FormatException
Run Code Online (Sandbox Code Playgroud)

我发现这种行为真的很奇怪.当我写一个XDoucment时,它不是写在应用程序或线程的文化中,而是总是在美国文化中.我错过了什么吗?我有一些解决方法来表现我期望的方式,但我发现它们并非"干净".

//This will work
XElement myXmlElement = new XElement("ADoubleElement", 1.1d.ToString());
double myDouble = double.Parse(myXmlElement.Value);
//This will also work but if I write XElement, it will not have the correct Culture
XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
double myDouble = (double)myXmlElement;
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 5

XML规范描述了数据应该如何格式化,这就是为什么XElement不使用您的文化 - 它遵循XML规范(实际上可能与之相同InvariantCulture)

这也是为什么投射XElementdouble工作而double.Parse不是:它遵循XML规范格式而不是本地格式.