利用JSON 序列化的自定义转换器解决后端long类型传到前端精度丢失

问题:

c# 的long类型精度比前端JS的number精度高,前端JS 的long类型只有17位,当后端传给前端的long类型超过17位时,就会造成数据精度丢失。

解决方案:

 1. 我们可以自定义一个json序列化的转换器,将long类型转换为string类型。代码如下:

复制代码
    public class LongToStringConverter : JsonConverter<long>
    {
        public override long ReadJson(JsonReader reader, Type objectType, long existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            long value = Convert.ToInt64(reader.Value);
            return value;
        }

        public override void WriteJson(JsonWriter writer, long value, JsonSerializer serializer)
        {
            string stringValue = value.ToString();
            writer.WriteValue(stringValue);
        }
    }
复制代码

2. 配置我们自定义的 LongToStringConverter 

        services.AddControllers().AddNewtonsoftJson(options =>
        {
           
          // 将long类型转换为string类型,从而解决后端long类型传到前端精度丢失的问题。
            options.SerializerSettings.Converters.Add(new LongToStringConverter());
        });

 

参考:https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json/converters-how-to?pivots=dotnet-6-0

posted @   奚毛宇  阅读(514)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示