c# – WebAPI,JSON.Net并丢失十进制精度
发布时间:2020-12-15 06:57:33 所属栏目:百科 来源:网络整理
导读:我使用WebAPI和 JSON.Net遇到了一个奇怪的问题.当将已经提交到我的API的JSON序列化时,我似乎失去了精度!我将十进制小数位提交到3位小数,但是当我的对象中的值实现时,它只有2位小数位! 我提交的JSON看起来像这样: { id: 1,name: 'mock data',value: 123.45
我使用WebAPI和
JSON.Net遇到了一个奇怪的问题.当将已经提交到我的API的JSON序列化时,我似乎失去了精度!我将十进制小数位提交到3位小数,但是当我的对象中的值实现时,它只有2位小数位!
我提交的JSON看起来像这样: { id: 1,name: 'mock data',value: 123.456 } 这绑定到一个看起来像这样的类: public class MockObject { public int Id { get; set; } public string Name { get; set; } public decimal Value { get; set; } } 只是为了完整性,这基本上是我的WebAPI方法的样子: public HttpResponseMessage Post (MockObject data) { // do something with the value here and return the relevant response } 我通过JQuery ajax请求提交数据,但是我们可以看到发布的值完全符合我在Chrome开发工具中检测之前的预期值,而在提交之后,以及在提示符“过度”之后,它们会在提示器中显示. 当它在Post方法中对物化对象做某事时,“Value”的值为123.45. 如果我提交2位或更少的小数位数(123.4或123.45),则该值将按预期方式取消序列化,但是如果我提交的小数位数超过2位(即123.456或123.4567等),则值将始终取消序列化为123.45. 有人遇到这个问题吗?有什么建议么? 解决方法
我设法解决这个问题.
最后,问题是由于文化被设置为包含货币编号格式的事实.货币数字格式指定应用于十进制值的小数位数. 要解决这个问题,我现在将WebApi JSON序列化程序文化设置为Global.ascx.cs中的CultureInfo.InvariantCulture的新实例,如下所示: GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Culture = new CultureInfo(string.Empty) { NumberFormat = new NumberFormatInfo { CurrencyDecimalDigits = 5 } }; 这意味着十进制值最多可以有5位小数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |