2015-04-03 33 views
0

鑑於這種ApiController如何從WebAPI返回本地化內容?字符串的工作,但不是數字

public string TestString() { 
    return "The value is: " + 1.23; 
} 

public double TestDouble() { 
    return 1.23; 
} 

隨着瀏覽器的語言設置爲 「FR-FR」,將出現以下情況:

/apiController /後的TestString產生

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">The value is: 1,23</string> 

/apiController/TestDouble收益率

<double xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1.23</double> 

我希望TestDouble()在XML中產生1,23。任何人都可以解釋爲什麼不是這種情況,更重要的是,如何使它做到這一點?

回答

1

這是因爲從雙倍到字符串的轉換髮生在每個API的不同階段。對於TestString API,使用double.ToString()將該數字轉換爲使用當前線程的CurrentCulture的字符串,並且在調用TestString方法時發生。同時,在使用GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Culture的序列化步驟中,將由TestDouble返回的double數字序列化爲字符串。 在我看來,兩者都應該使用InvariantCulture。在消費者方面,這些值將被解析並被格式化爲正確的文化。

更新:這僅用於JsonFormatter。 XmlFormatter沒有這樣的設置。

更新2: 似乎數(十進制)需要特殊的轉換器,使其文化感知: Handling decimal values in Newtonsoft.Json

順便說一句,如果你想每次動作/請求O更改數據格式,你可以試試最後一段代碼如下鏈接:http://tostring.it/2012/07/18/customize-json-result-in-web-api/

+0

啊,非常有幫助,謝謝。澄清一點:如果我在返回double之前手動設置JsonFormatter的文化,它仍然不會根據該文化序列化它。這是預期的行爲? – DuncanMack 2015-04-06 14:43:27

+0

@DuncanMack對不起,該設置僅適用於JsonFormatter。我不知道任何可用於XmlFormatter的設置,這是您正在使用的設置。我更新了我的答案。 – Thuan 2015-04-06 15:35:09

+0

對不起,我的意思是JSON(...我使用內容協商標題返回JSON)。它返回JSON,但仍然沒有本地化,儘管在返回double之前設置了文化。 – DuncanMack 2015-04-06 17:13:05

相關問題