fastjson序列化(对象转字符串)时字段的大小写问题与我自己的使用方案
2016-11-27 22:12
405 查看
因为现在公司的后台是.net,而他们的命名方式并不是Java的JavaBean,。这时如果还是按照以前的方式实体的创建使用JavaBean的方式,在序列化的时候就会出现很多不必要的麻烦-———当我们需要传递序列化的参数给后台时就会发现变量名首字母全部都成了小写。 先说一说我刚开始的解决方式吧,因为我之前就知道使用 @JSONField 注解可以改变变量名称,于是我便使用这个注解将参数序列化时的名称改为首字母大写,刚开始参数很少没有感觉,但是随着参数的增加(已经达到十几个了),我觉得这种方式是在太蠢了,实在是一个没有意思的体力活,于是我查了点资料加上自己的测试发现:
fastjson在序列化时已经为考虑到了Model的两种创建方式:
1.熟悉的JavaBean方式-也就是使用驼峰法(变量名首字母小写),同时变量添加Get与与Set方法,变量的访问方式设置为私有: 这时fastjson在序列化是会根据get方法的第三的字符后的字符串来判断变量名称,同时第一个参数会设置成小写,fastjson中的TypeUtils中的静态变量compatibleWithJavaBean(当做JavaBean来处理)会设置成True2.变量的首字母是大写,不需要Get Set方法,使用构造方法给field赋值,或者使用直接赋值的方式(使用"."来赋值),变量访问方式为公有:这时fastjson在序列化时会根据字段的名称来判断变量的名称(fastjson中称为FieldName).fastjson中的TypeUtils中的静态变量
compatibleWithFieldName(根据FieldName来输入输出数据)会设置成True
3.如果两个条件同时满足的话将会同时使用两种方式来处理。
最后我自己的使用方案:
刚开始的时候我很想坚持自己的习惯方式(使用JavaBean),但是实在是太麻烦了——每个字段都需要添加FieldName,实在是太累了,我受不了放弃了,
最后我想了一下,为什么我要这么坚持Java的命名方式呢?合适的不就是最好的吗?于是我决定也按照后台的命名规则来创建实体类,但是我还是想保留一些
JavaBean的优点:可以在Set方法中做一些其他的处理操作,于是当我需要Set方法时我保留了字段的反序列化(添加Get Set方法),但是我又不想在序列化
时存在首字母小写的字段,于是我便在Get方法上添加注解-@JSONField(serialize = false)。
这是我目前的解决方案,或许在我对fastjson源码更加了解(只看了一点点...有个Config类没细看可能能解决我的疑惑, maybe )
或者经验更丰富后我能有更好的解决方式。
相关文章推荐
- 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
- 多层嵌套对象无法使用gson反序列化的问题The JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@3bf13cde failed to de
- 解决Android开发中,ActiveAndroid和Gson同时使用,对象序列化失败的问题
- fastjson将bean转成字符串时key首字母大小写问题
- c# 使用 Newtonsoft.Json 序列化json字符串以及,反序列化对象
- Java知识点整理:第十三章:字符串的序列化(文字的编码方案)、字符流(Reader Writer)、对象序列化
- SpringMVC使用@ResponseBody注解来实现对象序列化成JSON字符串
- [置顶] Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)
- unserialize的这个问题是由一个emlog论坛用户在使用时报错而发现的 问题表现情况如下: emlog缓存的保存方式是将php的数据对象(数组)序列化(serialize)后以文件的形式存放,
- 关于json反序列化字符串为java对象时科学计数法和精度问题
- springboot中使用redis,key序列化问题解决方案
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。”的问题
- IBM Data Studio使用----对象创建的双引号/大小写问题以及表/列重命名
- 后台使用类将对象序列化为JSon字符串
- 浮点数类型计算问题,bigDecimal对象构造函数尽量使用字符串参数
- ProtoStuff 使用问题,加字段 无法反序列化
- iOS中使用NSSerialization把对象转为JSON字符串后,多出来反斜杠的问题
- Android问题解决之使用字符串&对象空值判断
- 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象
- 解决Android开发中,ActiveAndroid和Gson同时使用,对象序列化失败的问题