[英]C# - XElement and Culture
我在XElement和文化方面遇到问题。
我的本地文化是法国。 浮点值用逗号而不是点写。
Console.WriteLine(1.1d);
//1,1
但是,当我在XElement中放入一个double时,它以美式格式存储。
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
原因double.Parse
不能:它遵循XML规范格式而不是本地规范格式。
在转换为字符串或从字符串转换时, XElement
将始终使用InvariantCulture
。
XML是用于序列化数据的,在跨文化迁移时,您不希望它中断。
默认情况下, Parse()
和ToString()
使用CurrentCulture
。
这是因为这些功能是在与希望以常规方式查看数字的用户交互时使用的。
调用Parse()
或ToString()
时,应始终明确传递一种区域性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.