gpt4 book ai didi

c# - WebAPI、JSON.Net 和丢失小数精度

转载 作者:可可西里 更新时间:2023-11-01 08:21:23 24 4
gpt4 key购买 nike

我在使用 WebAPI 和 JSON.Net 时遇到了一些奇怪的问题。在反序列化已提交给我的 API 的 JSON 时,我似乎失去了精度!我将小数点保留到小数点后 3 位,但是当值在我的对象中具体化时,它只保留到小数点后 2 位!

我提交的 JSON 如下所示:

{
id: 1,
name: 'mock data',
value: 123.456
}

这绑定(bind)到一个看起来像这样的类:

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 开发工具中的值以及在它们“通过网络”后在 fiddler 中检查时的预期完全一样".

当它在 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 位小数。

关于c# - WebAPI、JSON.Net 和丢失小数精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com