2012-07-13 68 views
1

我們得到了地方相關網站的客戶端,其中的貨幣被設置爲區域格式地區性,這是我們解析,如:移除小數

bool result = decimal.TryParse(currencyValue, NumberStyles.Currency, myCulture, out value); 

當我們序列化此十進制到XML和十進制以前在myCulture =解析EN-US,XmlSerializer的返回<Curr id="2" amnt="100000000.00"/>和反序列化回相同數目的......但是當我們在SK-SK或CS-CZ做到這一點,它返回<Curr id="2" amnt="100000000,00"/>返回* 100的反序列化(忽略逗號)...

是否有可能從十進制中刪除這個區域,或使其不變? (如果我不想將它轉換爲字符串並再次解析回來處理區域)

+1

序列化在任何地方都使用相同的文化('InvariantCulture'看起來非常合適)。 – Oded 2012-07-13 16:39:11

+0

如果我理解正確 - 我覺得很難相信。你確定你沒有使用XmlSerializer來串行化一個字符串而不是小數?或者你使用自定義序列化?郵政編碼,說明發生了什麼。 – Joe 2012-07-13 17:14:22

+0

是的,我敢肯定它是一個小數,是的,我也不可能......有小數?對象,它在調試時顯示值爲100,但如果使用en-EN語言環境解析,則在xml中寫入100.00;如果是cs-CZ,則爲100,00。現在,我無法在家中顯示更多代碼無法訪問tfs。 – sasjaq 2012-07-13 22:33:12

回答

1

所以我寫的答案我自己的問題,對可以關閉這個主題......

有一個新的有趣的一點,就是我今天得到早晨起牀後開始工作。在序列化之前,有問題的小數被添加到了distionary中,這是一個小問題,因爲IDictionary不能被序列化,直到它實現IXmlSerializable。有兩種重寫方法,ReadXml和WriteXml。這裏的目標是在WriteXml中使用decimalValue.ToString(),這就產生了問題。我不知道它爲什麼,但是這個.ToString()返回了我所描述的不匹配結果。我不知道,它是如何發生的,因爲在測試項目中它的工作是完美的,但在我們的完整背景下卻不行。但隨着Mulder探員認爲,the truth is out there

因此,只有什麼,我需要做的,是decimalValue.ToString()更改爲decimalValue.ToString(CultureInfo.InvariantCulture)

THX您的時間。

0

區域用於屏幕顯示 - 您可以以他們理解或喜歡的格式向用戶顯示信息。當數據未顯示給用戶時(在內存中,在數據庫中,通過網絡)總是以已知格式將其序列化。就文化信息而言,這通常是InvariantCulture,正如@Oded指出的那樣。

這使您可以將數據從一種文化傳輸到另一種文化,而不必讓每種文化都瞭解其他文化。

+0

我們使用標準的.net(de)序列化與不變的文化(我不確定現在,如果有一個定義)...我們的問題是,只有地方,我們使用區域設置是在解析傳入的數據和在頁面上顯示它......用戶向文本框中插入數據,然後我們用選定的區域設置解析它(我有兩個用戶,一個使用en-EN,第二個使用cs-CZ)......這是一個小數? (可爲空),它圍繞所有進程(沒有其他區域檢查或處理)......這個小數?當我在我的問題中寫入時,最後序列化爲xml。 – sasjaq 2012-07-13 22:30:00

+0

用戶輸入數據 - >程序用用戶區域設置解析數據 - >解析數據以不變的文化存儲。當顯示數據時 - >數據以不變的文化被恢復 - >數據在用戶的文化中是格式化的(en-EN或cs-CZ) - >數據顯示給用戶。 – 2012-07-14 16:02:50