C# - XElement 和文化

标签 c# .net xelement culture

我在 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/

相关文章:

c# - xml文件,需要写入到 "channel"元素的末尾

c# - 我如何解析这个 XML(没有得到 "Root element is missing"或 "Sequence contains no elements")?

c# - 如何捕获控件内的所有项目?

c# - 在字符串列表中查找所有整数

c# - 如何连接两个表,其中条件 'Where' 与与第一个表关联的第三个表相关

.net - 如何使在该函数中可访问的函数中创建的 PSDrive 可用?

c# - "Could not load file or assembly ' System.Core, Version=2.0.5.0,...”动态加载可移植类库时出现异常

.net - 自动调整标签字体大小

c# - xElement Linq 创建列表

c# - Xelement 扩展空标签