.Net Core 配置之long类型 前端精度丢失和时间格式设置
在很多项目中,都采用的前后端分离的方式进行开发,经常遇到后台的long精度的数据到前端丢失不准确,显示效果为long类型(19位)的后几位为000,此时需要对long的字段进行设置,改变默认的返回类型,由long类型改变为string类型。所以需要全局自定义修改long类型的返回类型
- using Newtonsoft.Json;
- using Newtonsoft.Json.Serialization;
- using System;
- namespace NetCore3WebApiTemplate.Utility
- {
- public class CustomContractResolver : CamelCasePropertyNamesContractResolver
- {
- ///// <summary>
- ///// 实现首字母小写
- ///// </summary>
- ///// <param name="propertyName"></param>
- ///// <returns></returns>
- //protected override string ResolvePropertyName(string propertyName)
- //{
- // return propertyName.Substring(0, 1).ToLower() + propertyName.Substring(1);
- //}
- /// <summary>
- /// 对长整型做处理
- /// </summary>
- /// <param name="objectType"></param>
- /// <returns></returns>
- protected override JsonConverter ResolveContractConverter(Type objectType)
- {
- if (objectType == typeof(long))
- {
- return new JsonConverterLong();
- }
- return base.ResolveContractConverter(objectType);
- }
- ///// <summary>
- ///// Creates a Newtonsoft.Json.Serialization.JsonProperty for the given System.Reflection.MemberInfo.
- ///// </summary>
- ///// <param name="type"></param>
- ///// <param name="memberSerialization"></param>
- ///// <returns></returns>
- //protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
- //{
- // return type.GetProperties()
- // .Select(p =>
- // {
- // var jp = base.CreateProperty(p, memberSerialization);
- // jp.ValueProvider = new NullToEmptyStringValueProvider(p);
- // return jp;
- // }).ToList();
- //}
- }
- }
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace NetCore3WebApiTemplate.Utility
- {
- /// <summary>
- /// Long类型Json序列化重写
- /// 在js中传输会导致精度丢失,故而在序列化时转换成字符类型
- /// </summary>
- public class JsonConverterLong : JsonConverter
- {
- /// <summary>
- /// 是否可以转换
- /// </summary>
- /// <param name="objectType"></param>
- /// <returns></returns>
- public override bool CanConvert(Type objectType)
- {
- return true;
- }
- /// <summary>
- /// 读json
- /// </summary>
- /// <param name="reader"></param>
- /// <param name="objectType"></param>
- /// <param name="existingValue"></param>
- /// <param name="serializer"></param>
- /// <returns></returns>
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
- {
- if ((reader.ValueType == null || reader.ValueType == typeof(long?)) && reader.Value == null)
- {
- return null;
- }
- else
- {
- long.TryParse(reader.Value != null ? reader.Value.ToString() : "", out long value);
- return value;
- }
- }
- /// <summary>
- /// 写json
- /// </summary>
- /// <param name="writer"></param>
- /// <param name="value"></param>
- /// <param name="serializer"></param>
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
- {
- if (value == null)
- writer.WriteValue(value);
- else
- writer.WriteValue(value + "");
- }
- }
- }
在startup的ConfigureServices中设置
序列化的格式
- options.SerializerSettings.ContractResolver = new CustomContractResolver();
- 时间格式:
- options.SerializerSettings.DateFormatString = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
- 代码如下:
- /// <summary>
- /// This method gets called by the runtime. Use this method to add services to the container.
- /// </summary>
- /// <param name="services"></param>
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddControllers(ops =>
- {
- }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
- .AddNewtonsoftJson(options =>
- {
- //设置时间格式
- options.SerializerSettings.DateFormatString = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
- options.SerializerSettings.ContractResolver = new CustomContractResolver();
- });
- }
注意:
- AddNewtonsoftJson 方法需要应用Microsoft.AspNetCore.Mvc.NewtonsoftJson
.Net Core 配置之long类型 前端精度丢失和时间格式设置的更多相关文章
- Long类型参数传到前端精度丢失的解决方案
由于公司数据库表的id是利用雪花算法生成的,所以实体类里面定义的数据类型为Long.但是这个数据传到前端时,发生了精度丢失的现象.本文记录了从java后端的角度如何解决这个精度丢失的问题,便于 ...
- Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
1.前言 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度 ...
- springboot中关于Long类型返回前端精度丢失问题处理
使用了HuTool这个雪花算法后,会出现丢失精度的问题 hutool算法使用地址 对于一些大的业务表,自增主键这里 接口层得注意下是否会产生大数值 设计接口的时候采用String类型. 在项目中,我们 ...
- Long类型数据前端精度丢失
问题描述 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440 相 ...
- [ JAVA编程 ] double类型计算精度丢失问题及解决方法
前言 如果你在测试金融相关产品,请务必覆盖交易金额为小数的场景.特别是使用Java语言的初级开发. Java基本实例 先来看Java中double类型数值加.减.乘.除计算式实例: public cl ...
- 后端Long类型传到前端精度丢失的正确解决方式
原因:前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度,比如现在分布式id生成算法"雪花算法"在使用中就会出现问题. 解决方式: 1.后端的Long类型 ...
- ASP.Net Core中设置JSON中DateTime类型的格式化(解决时间返回T格式)
最近项目有个新同事,每个API接口里返回的时间格式中都带T如:[2019-06-06T10:59:51.1860128+08:00],其实这个主要是ASP.Net Core自带时间格式列化时间格式设置 ...
- 如何解决前端传来的时间格式与mysql表中时间格式不匹配的查询问题
前端传过来的时间格式为“2016-07-11 11:13:10”,而数据表中对应字段`add_time`的格式为“2016-7-11”,此时sql不能直接用 "where `add_time ...
- 后端将Long类型数据传输到前端出现精度丢失的问题
当将超过16位的数字传输到前端的时候,就会出现精度丢失的问题,然后我按照网上的几种方法实验的时候,只有一种方法成功了.可能是因为环境等方面的问题. 我这里成功是因为:最后使用的是配置mvc的方式,然后 ...
随机推荐
- 力扣题解-面试题22. 链表中倒数第K个节点
题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...
- .net core kafka 入门实例 一篇看懂
kafka 相信都有听说过,不管有没有用过,在江湖上可以说是大名鼎鼎,就像天龙八部里的乔峰.国际惯例,先介绍生平事迹 简介 Kafka 是由 Apache软件基金会 开发的一个开源流处理平台, ...
- bash leetcode
拓展:grep 193. ref: https://blog.csdn.net/yanglingwell/article/details/82343407 Given a text file fil ...
- 如何为Form表单的多个提交按钮指定不同的Action地址?
这是我很久以前看到的一个技巧,但我忘记在哪里了,当时遇到这样的需求,做了笔记,现在整理成文章分享出来,因为我感觉这个小技巧还是挺有用的,这种应用场景也算比较常见,比如一个表单有"保存&quo ...
- 彻底理解JavaScript ES6中的import和export
0.前言 前端工程,在最早的时候是没有模块的概念的.随着前端工程的发展,前端开发也越来越规范化,更像是软件工程了.那么随之而来的,为了解决工程化的问题,就引入了模块的概念.但是在早期,因为ecmasc ...
- VNC远程控制,如何使用VNC远程控制来管理公司?
VNC是功能强大的远程操作软件,可以实现日常的远程连接操作:如果稍加利用,可以实现公司的日常管理:既能够节省自身的时间,还可高效的完成这个功能! 我们可以使用:服务器管理工具来进行相关的操作 一.首先 ...
- [Python3]为什么map比for循环快
实验结论 如果需要在循环结束后获得结果,推荐列表解析: 如果不需要结果,直接使用for循环, 列表解析可以备选; 除了追求代码优雅和特定规定情境,不建议使用map 如果不需要返回结果 这里有三个pro ...
- [验证码识别技术] 字符型验证码终结者-CNN+BLSTM+CTC
验证码识别(少样本,高精度)项目地址:https://github.com/kerlomz/captcha_trainer 1. 前言 本项目适用于Python3.6,GPU>=NVIDIA G ...
- Java IO实现文件(及文件夹)的复制 原创代码【精】
单个文件复制 FileInputStream input=new FileInputStream("C://360//fay.jpg"); FileOutputStream out ...
- MySQL 高级—— 锁机制
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.锁的概述 1.锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除传统的计 ...