如何 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/
鉴于此 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/