【问题标题】:HttpClient ReadAsStringAsync rounding decimalHttpClient ReadAsStringAsync 舍入小数
【发布时间】:2019-04-26 11:31:52
【问题描述】:

在其中一个 Net API 控制器中,我有一个将请求发送到另一个第三方 API 的操作,在收到响应后,它会对收到的 JSON 数据进行一些操作,最后将响应返回给前端应用程序。示例代码如下:

using (var client = new HttpClient())
{
    var response = await client.GetAsync(_remoteServiceEndPoint + "student/" + id);
    if (response.IsSuccessStatusCode)
    {
        var contentString = await response.Content.ReadAsStringAsync();
        //do something with contents and finally return response to the caller
    }
}

现在,如果第三方发送一个 JSON 响应,其中包含一个像 999999999999999.99 这样的数字,并且在上面的代码 sn-p 中执行 ReadAsStringAsync,它会将值更改为 10000000000000000。我不想要。

我想知道为什么ReadAsStringAsync 会这样。

【问题讨论】:

  • 您确定是调用ReadAsStringAsync() 导致了问题吗?我怀疑这可以正常工作,但是在使用 NewtonSoft 反序列化字符串时会遇到问题。
  • 这听起来像是一个应该在 corefx 存储库中报告的错误,但我同意 Jesse - 我看不出ReadAsStringAsync 需要或想要修改它正在检索的数据的任何理由.
  • @JessedeWit 我的错。是JObject.Parse(contentString) 导致了这个问题。
  • @AJQarshi 太好了,我在过去写的所有对ReadAsStringAsync 的调用都汗流浃背。

标签: c# dotnet-httpclient


【解决方案1】:

感谢@JessedeWit 指出这是 NewtonSoft 库的问题。引入this SO 问题回复中提到的解决方法解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多