利用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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步