如何 return 本地化来自 WebAPI 的内容?字符串有效但数字无效

How to return localized content from WebAPI? Strings work but not numbers

鉴于此 ApiController:

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。谁能解释为什么不是这种情况,更重要的是,如何做到这一点?

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

Update:这个只用于JsonFormatter。 XmlFormatter 没有这样的设置。

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

顺便说一句,如果你想根据 action/request 更改数据格式,你可以尝试以下 link 的最后一段代码:http://tostring.it/2012/07/18/customize-json-result-in-web-api/