2011-09-09 85 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