【问题标题】:JSON serializer issue with .Net Core.Net Core 的 JSON 序列化程序问题
【发布时间】:2022-01-20 18:56:14
【问题描述】:

我有一个restful api(.Net Core web api),它调用另一个api(第3方)并以json格式接收数据。然后使用反序列化将这个 json 数据转换为类对象。

问题:从其他api返回的JSON数据包含一些十进制值,例如325.34723897,但是当它在restful api中接收时,它只有325并且所有十进制值都被修剪。正在使用如下代码调用第 3 方 api(responseStream 本身具有修剪值):

 HttpWebRequest webRequest = GetWebRequest();
        webRequest.Method = "POST";

        UTF8Encoding encoding = new UTF8Encoding();
        Byte[] byteArray = encoding.GetBytes(Request);

        webRequest.ContentLength = byteArray.Length;
        webRequest.Timeout = 60;            

        try
        {
            using (Stream dataStream = webRequest.GetRequestStream())
            {
                dataStream.Write(byteArray, 0, byteArray.Length);
            }

            WebResponse webResponse = await webRequest.GetResponseAsync();

            using (Stream responseStream = webResponse.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                ResponseString = reader.ReadToEnd();
                response = _serializer.DeserializeObject<TResponse>(ResponseString);
            }
        }
        catch (Exception ex)
        {}

如何在 DotNet Core 中修复它。

我找到了一些论坛,其中的解决方案是针对 Dot Net Framework 而不是针对 Core(因为 GlobalConfiguration 在 Core 中不存在)。

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Culture = new CultureInfo(string.Empty) {
NumberFormat = new NumberFormatInfo {
    CurrencyDecimalDigits = 5
}};

【问题讨论】:

  • 您必须将您的响应字符串发布到 other 中才能对其进行测试。并且设置取决于序列化器类型,而不是全局变量。您正在使用什么序列化,例如可以使用 Newtonsoft.Json 吗?

标签: json asp.net-core-webapi json-deserialization


【解决方案1】:

我刚刚尝试 Newtonsoft.Json 反序列化值为 325.34723897 的双重属性,并且一切正常。您可以使用 Nuget 安装它。试试这个代码

 ResponseString = reader.ReadToEnd();
 response = JsonConvert.DeserializeObject<...your class>(ResponseString);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-23
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多