如何从Web API返回本地化内容?字符串工作但不是数字

时间:2015-04-03 20:25:19

标签: asp.net-web-api localization

鉴于此ApiController

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

public double TestDouble() {
    return 1.23;
}

将浏览器的语言设置为" fr-FR",会发生以下情况:

/ apiController / TestString yield

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

/ apiController / TestDouble yield

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

我希望TestDouble()在XML中产生1,23。任何人都可以解释为什么不是这样的,更重要的是,如何做到这一点呢?

1 个答案:

答案 0 :(得分:1)

这是因为从double到string的转换发生在每个API的不同阶段。对于TestString API,double.ToString()用于使用当前线程的CurrentCulture将数字转换为字符串,并在调用TestString方法时发生。同时,TestDouble返回的double号在序列化步骤中被序列化为字符串,该步骤使用GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Culture。 在我看来,两者都应该使用InvariantCulture。在消费者方面,价值将被解析并使用正确的文化进行格式化。

更新:这仅用于JsonFormatter。 XmlFormatter没有这样的设置。

更新2 : 似乎(十进制)数字需要特殊的转换器才能使其具有文化意识: Handling decimal values in Newtonsoft.Json

顺便说一句,如果您想要更改每个操作/请求的数据格式,您可以尝试以下链接的最后一段代码:http://tostring.it/2012/07/18/customize-json-result-in-web-api/