Mo *_*o D 12 c# json.net asp.net-web-api
我使用WebAPI和JSON.Net遇到了一个奇怪的问题.当反序列化已提交给我的API的JSON时,我似乎正在失去精确度!我将小数提交到3位小数,但当值在我的对象中实现时,它只有2位小数!
我提交的JSON看起来像这样:
{
id: 1,
name: 'mock data',
value: 123.456
}
Run Code Online (Sandbox Code Playgroud)
这绑定到一个看起来像这样的类:
public class MockObject {
public int Id { get; set; }
public string Name { get; set; }
public decimal Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为了完整性,这基本上就是我的WebAPI方法:
public HttpResponseMessage Post (MockObject data) {
// do something with the value here and return the relevant response
}
Run Code Online (Sandbox Code Playgroud)
我通过JQuery ajax请求提交数据,但我可以看到发布的值与我在提交之前检查chrome dev工具中的值时的预期完全一致,并且一旦它们"通过网络"消失,就会在fiddler中查看.
当它在Post方法中对物化对象做某事时,"值"的值为123.45.
如果我提交2个或更少的小数位(即123.4或123.45),则该值按预期反序列化,但是如果我提交超过2个小数位(即123.456或123.4567等,则该值总是被反序列化为123.45.
其他人遇到过这个问题?有什么建议?
Mo *_*o D 17
我设法解决了这个问题.
最后,问题是由于正在设置包含货币编号格式的文化这一事实.货币编号格式指定应用于小数值的小数位数.
为了解决这个问题我现在设置的WebAPI JSON序列化文化的新实例CultureInfo.InvariantCulture中Global.ascx.cs,像这样:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Culture = new CultureInfo(string.Empty) {
NumberFormat = new NumberFormatInfo {
CurrencyDecimalDigits = 5
}
};
Run Code Online (Sandbox Code Playgroud)
这意味着十进制值最多可包含5个小数位.
| 归档时间: |
|
| 查看次数: |
8235 次 |
| 最近记录: |