Вопрос о десятичном разделителе - PullRequest
3 голосов
/ 09 сентября 2011

Десятичный разделитель ('.' Или ',') зависит от CurrentCulture?

У меня проблема с сериализацией XML.Когда я набираю ',' в качестве разделителя, у меня возникает исключение.(Культура установлена ​​как DE-de)

С уважением

пример (TestProperties - мой собственный класс для тестирования)

TestProperties properties = new TestProperties 

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);

double tempValue = 1.23 // Or 1,23
properties.DoubleValue = tempValue;

XmlSerializer serializer = new XmlSerializer(typeof(TestProperties));
TextWriter textWriter = new StreamWriter(XMLPath);
serializer.Serialize(textWriter, properties);
textWriter.Close();


public class TestProperties
    {   
        private double _doubleValue;
        [XmlElement("Double")]
        public double DoubleValue
        {
            get { return _doubleValue; }
            set { _doubleValue = value; }
        }
    }

Ответы [ 2 ]

4 голосов
/ 09 сентября 2011

Десятичный разделитель определяется текущей культурой, однако для XML-сериализации текущая культура не учитывается.XML соглашение должно быть использовано;десятичный разделитель в XML всегда будет точкой.

Если вы создаете XML вручную, вы должны использовать класс XMLConvert, чтобы обеспечить форматирование всех типов данныхправильно в XML.

3 голосов
/ 09 сентября 2011

Это полностью зависит от контекста. Вы упоминаете XML; в xml , формат обычно представлен в некультурной культуре (что означает:. Является десятичным числом, и тысячами и т. Д.). Точно так же xml имеет определенные представления для даты / времени.

Если вы создаете свой XML через XmlWriter, XElement, XmlSerializer (и т. Д.), Это будет автоматически; если вы создаете его вручную, его вполне можно перепутать (смесь разных представлений).

Если данные не в ожидаемом формате, вам может потребоваться загрузить их в свойство string (а не, скажем, float и т. Д.) И обработать их отдельно.

...