2011-09-09 50 views
3

小数点分隔符('。'或',')取决于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; } 
     } 
    } 
+0

这是文化特定的,但它取决于你在做什么。你能向我们展示代码吗? – TheCodeKing

回答

3

这完全取决于上下文。你提到xml; xml,格式通常用非文化文化表示(意思是:。是十进制数,等等)。同样,xml具有日期/时间的特定表示。

如果你正在通过XmlWriterXElementXmlSerializer(etc)构建你的xml,这将是自动的;如果你正在手动构建它,它可能会很困惑(混合不同的表示)。

如果数据预期的格式,您可能必须将其加载到一个string性质(而不是说,一个float等),并分别进行处理。

+0

感谢您的回复。 我还有一个问题。 我正在使用XMLSerializator。 它使用InvariantCulture,还是使用CurrentCulture? 如果当前,我可以使用Invariant吗? 我使用的系统具有不同的文化,所以我用有效的序列化或反序列化来纠正这些系统的麻烦。 – ogrod87

+0

@ ogrod87它是* xml * - 所以不变*加*其他一些东西(即DateTime格式不同等);文化在(序列化)时期不应该成为一个问题* - 但当然,无论你之后做什么都要服从文化。你看到的具体问题是什么? –

+0

是的。它发生在我尝试使用点或逗号作为小数分隔符序列化值时。取决于文化,在XML上我有不同的价值观。我想正常化xml。无论是用逗号或点输入值,我都希望用点来获取XML值。 – ogrod87

4

小数分隔符由当前文化决定,但对于XML序列化,不考虑当前文化。必须使用XML约定; XML中的小数点分隔符总是一个点。

如果您手动构建XML,则应该使用XMLConvert类来确保所有数据类型在XML中都格式正确。

+0

感谢您的回复。 我还有一个问题。 我正在使用XMLSerializator。 它使用InvariantCulture,还是使用CurrentCulture? 如果当前,我可以使用Invariant吗? 我使用的系统具有不同的文化,所以我用有效的序列化或反序列化来纠正这些系统的麻烦。 – ogrod87