鉴于此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。任何人都可以解释为什么不是这样的,更重要的是,如何做到这一点呢?
答案 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/