我在 XElement 和 Culture 方面遇到问题。
我的本地文化是法语。 float 值用逗号而不是点书写。
Console.WriteLine(1.1d);
//1,1
但是,当我将 double 放入 XElement 时,它以美国格式存储。
XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
Console.WriteLine(myXmlElement.Value);
//1.1
因此,当我尝试解析回我的 XElement 的值时,我得到了一个 FormatException。
XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
double myDouble = double.Parse(myXmlElement.Value);
//Throws a FormatException
我觉得这种行为很奇怪。当我写一个 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;
最佳答案
XML 规范描述了数据应该如何格式化,这就是为什么 XElement
不使用您的文化 - 它遵循 XML 规范(实际上可能与 InvariantCulture
相同)
这也是为什么将 XElement
转换为 double
有效而 double.Parse
无效的原因:它遵循 XML 规范格式而不是本地格式。
关于C# - XElement 和文化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19406826/