fastJson、JackJson以及Gson序列化对象与get、set以及对象属性之间的关系

众所周知,平时开发过程中将对象序列化成json字符串常用的工具类一般就三种:fastJson、Gson、Jackjson,但是三种工具类在将对象进行序列化时与对象的get、set、对象属性之间的关系你知道吗,如果知道了,那么下面的你没必要看了,不知道的话请继续看下去。

1.与对象属性之间的关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了区分三者之间的关系,我创建了一个测试类,只有一个success属性,没有get、set方法,默认值为false,可以看出,gson的序列化结果是{“success”:false},fastJson的结果是{},jackJson直接报错,由此可以得出结论:Gson是通过反射遍历该类中的所有属性,并把其值序列化成json,至于FastJson和JackJson的序列化跟属性暂时看不出来关系。

2.与对象的set方法之间的关系

在这里插入图片描述

在这里插入图片描述

   为了测试跟set方法的关系,我在测试类中给该属性加了一个set方法,运行的结果显示跟上面的一样,可以猜想跟set方法没关系,但是有的人可能会说,有可能通过反射遍历出该类中的所有setter方法,得到setSuccess,然后根据JavaBeans规则,获取测试类的属性,然后序列化成json,跟直接通过属性序列化的结果一样,因此只展示一个。因此我又在测试类中加了一个setTestSuccess方法,结果如下:

在这里插入图片描述
在这里插入图片描述

  运行的结果显示跟上面的一样,并没有多出任何结果,因此得出结论:三个工具类的序列化结果跟类的set方法没有关系。

3.与对象的get方法之间的关系

在这里插入图片描述
在这里插入图片描述
为了测试与get方法的关系,我加上了success属性的get方法,有人可能会说,不应该是getSuccess(),怎么是isSuccess()方法,具体原因请看我的博客《关于boolean类型的数据不推荐使用isXXX命名的那些事》,这里大致说一声,boolean类型的数据,其get方法默认就是isXXX(),不是getXXX(),这是规定的。

   从结果可以出,Gson序列化后的结果不变,而JackJson和FastJson不再报错,而是出现了结果,跟Gson序列化的结果一样,因此可以猜想JackJson和FastJson序列化结果跟get方法有关系,而Gson序列化的结果跟get方法有没有关系还不确定。因此我们还得再加一个get方法和一个isXXX()方法来测试,测试结果如下:

在这里插入图片描述
我在测试类中又加了一个isSuccessSecond()和getAuthorName(),结果发现gson序列化的结果还是不变的,但是jackJson和fastJson序列化的结果中多了两个值authorName和successSecond。

  因此可以得出结论:fastjson和jackson在把对象序列化成json字符串的时候,是通过反射遍历出该类中的所有getter方法,得到getAuthorName和isSuccessSecond,然后根据JavaBeans规则,他会认为这是两个属性authorName和successSecond的值,直接序列化成json。

综上所述:Gson是通过反射遍历该类中的所有属性,并把其值序列化成json字符串;JackJson和fastJson是通过getter方法获取属性,并把其值序列化成json字符串。

在这里插入图片描述

   三者的序列化都跟setter()没有任何关系,至于单个测试属性,setter方法、getter方法,我都试过,这里就不一一贴出来代码,想测试的大兄弟们可以自己测试,若有问题,请及时反馈。可能有人说跟isXXX()有关,其实是跟get方法有关,主要是boolean类型的属性,其get方法默认都是isXXX,Boolean类型的属性,其get方法还是getXXX(),感兴趣的同学可以看一下我的博客《关于boolean类型的数据不推荐使用isXXX命名的那些事》。如果还是认为跟isXXX()有关,可以自己试一下其它类型的属性。

————————————————

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值