2014-12-08 53 views
0

我有一個web應用程序,其中包含一些發佈到webservice-method的表單。 json-post由jquery $ .ajax方法完成。儘管我的cultureinfo設置爲nl-NL,但在發佈表單的值時,我的webmethod會拋出一個錯誤「10,00不是Decimal的有效值」。對於有荷蘭語的日期也是如此。Webservice忽略應用程序的cultureinfo設置

似乎.net序列化程序會忽略全局文化設置。當我將'10,00'更改爲'10.00'時,該帖子被webmethod接受。

我們一直在爲這個主題奮鬥了一段時間,找不到任何有用的SO和谷歌我自己。所以對這件事的任何幫助都會很好!

回答

1

所以基本上這是由於這個和平的代碼完成:

// No exponent, may or may not have a decimal (if it doesn't it couldn't be parsed into Int32/64) 
      decimal dec; 
      if (decimal.TryParse(input, NumberStyles.Number, CultureInfo.InvariantCulture, out dec)) { 
       // NumberStyles.Number: AllowLeadingWhite, AllowTrailingWhite, AllowLeadingSign, 
       //      AllowTrailingSign, AllowDecimalPoint, AllowThousands 
       return dec; 
      } 

參考:http://referencesource.microsoft.com/#System.Web.Extensions/Script/Serialization/JavaScriptObjectDeserializer.cs,111a17298608ded3,references

那麼唯一的選擇就是更換,用。並投降英國霸權。

+0

我認爲它不是「屈服於英國霸權」,更多的是「使用不變的文化,除了邊緣」。日期應該始終轉換爲格林尼治標準時間進行處理和存儲,數字和貨幣應始終處於文化不變格式。文化特異性似乎更像是一個UI /演示文稿問題。 – 2014-12-08 14:49:57

+0

@JohnBledsoe那麼邊緣在哪裏?當你的文化是荷蘭語(在這種情況下)TryParse「10,00」應該解析10.00作爲雙。 – 2014-12-08 15:09:06

+0

邊緣是用戶界面。您正在處理應用程序內通信($ .ajax到Web服務),根據我的經驗,這應該使用不變文化。 – 2014-12-08 16:51:06