Вопрос про десятичный разделитель

Зависит ли десятичный разделитель ('.' или ',' ) от 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; }
        }
    }

person GrzesiekO    schedule 09.09.2011    source источник
comment
Это зависит от культуры, но это зависит от того, что вы делаете. Можете ли вы показать нам код.   -  person TheCodeKing    schedule 09.09.2011


Ответы (2)


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

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

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

person Marc Gravell    schedule 09.09.2011
comment
Спасибо за ваши ответы. У меня есть еще один вопрос. Я использую XMLSerializator. Использует ли он InvariantCulture или CurrentCulture? Если актуально, могу ли я использовать инвариант? Я использую системы с разными культурами, поэтому мне нравятся проблемы с действительной сериализацией или десериализацией между этими системами. - person GrzesiekO; 09.09.2011
comment
@ ogrod87 это xml - поэтому инвариант плюс несколько других вещей (например, формат DateTime отличается и т. д.); культура не должна быть проблемой в момент (де)сериализации - но, конечно, все, что вы делаете после этого, зависит от культуры. Есть ли конкретная проблема, которую вы видите? - person Marc Gravell; 09.09.2011
comment
Да. Это происходит, когда я пытаюсь сериализовать значения с точкой или запятой в качестве десятичного разделителя. Зависит от культуры, в XML у меня разные значения. Я хочу нормализовать xml. Независимо от того, ввожу ли я значение с запятой или точкой, я хочу получить значение XML с точкой. - person GrzesiekO; 09.09.2011
comment
@ ogrod87 у вас есть пример того, как вы пытаетесь сериализовать это? иначе я только предполагаю - person Marc Gravell; 09.09.2011
comment
@ogrod87 ogrod87, а в этом примере, что такое желаемый xml и что такое фактический (нежелательный) xml? - person Marc Gravell; 09.09.2011
comment
желание: всегда с точкой фактическое: зависит от культуры (иногда точка, иногда запятая, иногда 0) - person GrzesiekO; 09.09.2011
comment
@ogrod звучит странно... Неожиданно - person Marc Gravell; 09.09.2011
comment
Да, я знаю. Возможно, если я не найду решения, я создам свой собственный сериализатор xml. Конечно, на основе сериализатора .net xml. - person GrzesiekO; 09.09.2011

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

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

person Frederik Gheysels    schedule 09.09.2011
comment
Спасибо за ваши ответы. У меня есть еще один вопрос. Я использую XMLSerializator. Использует ли он InvariantCulture или CurrentCulture? Если актуально, могу ли я использовать инвариант? Я использую системы с разными культурами, поэтому мне нравятся проблемы с действительной сериализацией или десериализацией между этими системами. - person GrzesiekO; 09.09.2011