Какой формат используется для xml-сериализации чисел в C #? - PullRequest
0 голосов
/ 26 июня 2018

Когда я пишу:

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

это дает "12,34", но когда я сериализую объект с двойным полем, это дает "12.34"

Это потому, что XmlSerializer использует какой-то определенный формат / культуру? Что именно? Я изучил исходный код Double, но не видел реализацию IXmlSerializable. Благодарю.

1 Ответ

0 голосов
/ 26 июня 2018

XmlSerializerWriter использует XmlConvert.ToString для преобразования значений.

Соответствующая часть из этого класса это :

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

Таким образом, он использует инвариантную культуру, которая выводит строку, соответствующую XML RFC (то есть точка в качестве десятичного разделителя).

Спецификатор формата "R" задокументирован здесь :

Спецификатор формата туда-обратно ("R") пытается гарантировать, что числовое значение, преобразованное в строку, будет проанализировано обратно в то же числовое значение. Этот формат поддерживается только для типов Single, Double и BigInteger.

Это означает, что другой конец выдаст такой же double результат при десериализации строкового значения.

...