我写的时候:
var d = 12.34D; d.ToString();
它给"12,34",但是当我用双字段序列化对象时,它给出了"12.34"
"12,34"
"12.34"
这是因为XmlSerializer使用了一些特定的格式/文化?到底是什么?我查看了Double的源代码,但没有看到IXmlSerializable的实现。谢谢。
XmlSerializer
IXmlSerializable
XmlSerializerWriter使用XmlConvert.ToString来转换值。
XmlSerializerWriter
XmlConvert.ToString
该类的相关部分是this:
return value.ToString("R", NumberFormatInfo.InvariantInfo);
所以它使用了不变文化,它恰好输出符合XML RFC的字符串(所以作为小数分隔符的句号)。
格式说明符"R"记录为here:
"R"
往返(“R”)格式说明符尝试确保将转换为字符串的数值解析回相同的数值。仅对Single,Double和BigInteger类型支持此格式。
这意味着在反序列化字符串值时,另一端将产生相同的double结果。
double