方式一:

public class SerializeConfigX extends SerializeConfig {

    public SerializeConfigX() {
put(Double.class, DoubleSerializerX.instance);
put(Long.class, LongCodecX.instance);
} static class DoubleSerializerX extends DoubleSerializer { public final static DoubleSerializerX instance = new DoubleSerializerX(); @Override
public void write(JSONSerializer serializer, Object object, Object fieldName,
Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.out; if (object == null) {
out.writeNull(SerializerFeature.WriteNullNumberAsZero);
return;
} double doubleValue = ((Double) object).doubleValue(); if (Double.isNaN(doubleValue) //
|| Double.isInfinite(doubleValue)) {
out.writeNull();
} else {
out.writeDouble(doubleValue, false);
}
}
} static class LongCodecX extends LongCodec {
public static LongCodecX instance = new LongCodecX(); @Override
public void write(JSONSerializer serializer, Object object, Object fieldName,
Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.out; if (object == null) {
out.writeNull(SerializerFeature.WriteNullNumberAsZero);
} else {
long value = ((Long) object).longValue();
out.writeLong(value);
}
}
} }

方式二:

public class SerializeConfigX2 extends SerializeConfig {
/**
* private的变量,只能重新定义一把,开销不大。
*/
private ASMSerializerFactory asmFactory;
private boolean asm = !ASMUtils.isAndroid();
{
try {
asmFactory = new ASMSerializerFactory();
} catch (NoClassDefFoundError eror) {
asm = false;
} catch (ExceptionInInitializerError error) {
asm = false;
}
} @Override
public ObjectSerializer createJavaBeanSerializer(Class<?> clazz) {
if (!Modifier.isPublic(clazz.getModifiers())) {
return new JavaBeanSerializerX(clazz);
} boolean asm = this.asm; if (asm && asmFactory.isExternalClass(clazz) || clazz == Serializable.class
|| clazz == Object.class) {
asm = false;
} {
JSONType annotation = clazz.getAnnotation(JSONType.class);
if (annotation != null && annotation.asm() == false) {
asm = false;
}
} if (asm && !ASMUtils.checkName(clazz.getName())) {
asm = false;
} if (asm) {
try {
ObjectSerializer asmSerializer = createASMSerializer(clazz);
if (asmSerializer != null) {
return asmSerializer;
}
} catch (ClassCastException e) {
// skip
} catch (Throwable e) {
throw new JSONException("create asm serializer error, class " + clazz, e);
}
} return new JavaBeanSerializerX(clazz);
} class JavaBeanSerializerX extends JavaBeanSerializer {
public JavaBeanSerializerX(Class<?> clazz) {
super(clazz);
} @Override
public FieldSerializer createFieldSerializer(FieldInfo fieldInfo) {
Class<?> clazz = fieldInfo.getFieldClass();
/**
* 修复android下的bug(非android下使用ASMSerializer,不报错)。
*
* 所有的努力都是为了这里,启用WriteClassName后,原生类型通过ObjectFieldSerializer(
* javabean反射)取得的值是对应的对象,json串会加上对应类型后缀(L、F、D、S、B)。
* 如果javabean使用原生类型定义变量,则反系列化parse时错误。
*
* 在此修复bug:原生类型务必使用NumberFieldSerializer
* (此类为包访问限制,只好复制一个NumberFieldSerializerX)
*
*/
if (clazz == Number.class || clazz == long.class || clazz == int.class
|| clazz == float.class || clazz == double.class || clazz == short.class
|| clazz == byte.class) {
return new NumberFieldSerializerX(fieldInfo);
} return super.createFieldSerializer(fieldInfo);
} } /**
* copy NumberFieldSerializer
*/
class NumberFieldSerializerX extends FieldSerializer { public NumberFieldSerializerX(FieldInfo fieldInfo) {
super(fieldInfo);
} @Override
public void writeProperty(JSONSerializer serializer,
Object propertyValue) throws Exception {
writePrefix(serializer);
this.writeValue(serializer, propertyValue);
} @Override
public void writeValue(JSONSerializer serializer, Object propertyValue) throws Exception {
SerializeWriter out = serializer.getWriter(); Object value = propertyValue; if (value == null) {
if (out.isEnabled(SerializerFeature.WriteNullNumberAsZero)) {
out.write('');
} else {
out.writeNull();
}
return;
} out.append(value.toString());
}
}
}

main:

JSON.toJSONString(user, new SerializeConfigX(),
SerializerFeature.WriteClassName, SerializerFeature.DisableCircularReferenceDetect);

fastjson WriteClassName,Double类型不打3.3D的更多相关文章

  1. Gson格式转换Integer变为Double类型问题解决

    问题描述 在前后端分离的开发模式下,前后端交互通常采用JSON格式数据.自然会涉及到json字符串与JAVA对象之间的转换.实现json字符串与Java对象相互转换的工具很多,常用的有Json.Gso ...

  2. OpenMesh 将默认的 float 类型改为 double 类型

    OpenMesh 中默认的数据类型都是 float 类型的,如果要将其默认的 float 类型改为 double 类型,可以这么做: #include <OpenMesh/Core/Mesh/P ...

  3. C语言基础(7)-float,double,long double类型

    1.定义方式 3.14这个就是一个浮点常量,3f是一个浮点类型的常量 float a;//定义了一个浮点类型的小数变量,名字叫a double b;//定义了一个double类型的变量,名字叫b lo ...

  4. 关于BigDecimal 和 double 类型保存金钱,以及精度问题,银行家舍入法

    1. BigDecimal 类型数据 的创建,构造函数 有 public BigDecimal(BigInteger intVal, long val, int scale, int prec); p ...

  5. 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

    分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...

  6. iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0

    首先请求到的数据都会变成字符串,先将字符串转化为double类型 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Menlo; color: ...

  7. 格式化Double类型

    //格式化Double类型 //F:默认是2位小数点 //F6:输出小数点后6位,不够的话用0补齐 //G:默认输出原先的,保留小数点后面的位数 LalTotal.Text = "合计:原始 ...

  8. struts2中Double类型的转换

    今天做项目,ssh + Extjs,页面js中定义了几个NumberField,对应的value都是double类型的,其中有个NumberField的name为 name,结果执行的时候报错了,说找 ...

  9. java double类型保留两位小数4种方法【转】

    4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ...

随机推荐

  1. 英语partschinite芬达石partschinite锰铝榴石

    partschinite指锰铝榴石,属于石榴石的一种,由于它有芬达饮料的诱人颜色,大家也称其为“芬达石”.石榴石宝石族中重要品种之一,化学成分为锰铝硅酸盐,颜色从红到橙红,红到棕红,玫瑰红.浅玫红均有 ...

  2. CTFd平台搭建以及一些相关问题解决

    CTFd平台搭建以及一些相关问题解决 一.序言 因为想给学校工作室提高一下学习氛围,随便带学弟学妹入门,所以做了一个ctf平台,开源的平台有CTFd和FBCTF,因为学生租不起高端云主机所以只能选择占 ...

  3. postgresql9.5编译安装体验

    实验环境: centos7.6 pgsql9.5 源码编译安装 实验目的: 体验源码编译安装pgsql 01.download https://ftp.postgresql.org/pub/sourc ...

  4. Django 之restfromwork 源码分析以及使用之--视图组件

    restframework 源码分析以及使用 mixins 中的五种类方法 from rest_framework import mixins # mixins 中一种有五种类 # 第一种:用户保存数 ...

  5. Odoo XML中操作记录与函数

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826037.html 一:XML文件中定义记录 XML中定义记录: 每个<record>元素有 ...

  6. 团队第四次——Alpha版本的发布

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在哪里 https:// ...

  7. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  8. 第六篇 -- LINQ to XML

    一.LINQ to XML常用成员 LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument  EmptySequence  获取空的元 ...

  9. html中定位详解

    首先,我们来讨论一下html中共有几种定位方式:静态定位(static),相对定位(relative),绝对定位(absolute,fixed).其中fixed又叫固定定位,它是属于绝对定位的一种,但 ...

  10. @Transactional(rollbackFor)

    @Transactional注解有两个,一个是spring提供的@org.springframework.transaction.annotation.Transactional 另一个是jdk提供@ ...