xml-C# 中的数字序列化使用什么格式?

What format is used for xml-serialization of numbers in C#?

当我写的时候:

var d = 12.34D;
d.ToString();

它给出 "12,34",但是当我用双字段序列化对象时,它给出 "12.34"

是因为XmlSerializer使用了一些特定的format/culture?究竟是什么?我查看了 Double 的源代码,但没有看到 IXmlSerializable 的实现。 谢谢。

XmlSerializerWriter使用XmlConvert.ToString转换值。

class 的相关部分是 this:

return value.ToString("R", NumberFormatInfo.InvariantInfo);

所以它使用不变文化,它恰好输出符合 XML RFC 的字符串(所以一个句点作为小数点分隔符)。

格式说明符 "R" 已记录 here:

The round-trip ("R") format specifier attempts to ensure that a numeric value that is converted to a string is parsed back into the same numeric value. This format is supported only for the Single, Double, and BigInteger types.

表示另一端在反序列化字符串值时会产生相同的double结果