《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(9)

简介: 《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(9)

《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(8) https://developer.aliyun.com/article/1232280?groupCode=java



七、 JSON反序列化技巧

 

这里以Fastjson为例,介绍一些JSON反序列化技巧。

 

1. 反序列化对象

 

利用JSON.parseObject方法反序列化对象:

 

image.png

2. 反序列化数组

 

利用JSON.parseObject方法反序列化数组:

image.png

3. 反序列化集合

 

利用JSON.parseArray方法反序列化列表:

image.png

 

利用JSON.parseObject方法反序列化集合:

image.png


4. 反序列化映射

 

利用JSON.parseObject方法反序列化映射:


image.png

注意:如果映射的key是复杂类型,这种方法反序列会报格式错误,需要自定义反序列化器。

 

5. 反序列化模板对象

 

利用JSON.parseObject方法反序列化模板对象:

image.png

6. 反序列化非公有字段

 

由于某些属性字段没有公有设置方法,或者以字段名称作为公有设置方法。当需要反序列化这些属性字段时,需要指定SupportNonPublicField(支持非公有字段)反序列化参数。

image.png

7. 反序列化Builder模式类

 

有些同学喜欢用Builder模式,导致实体类并没有公有构造方法。当利用Fastjson反序列化这些类是,就会出现以下问题:

 

image.png

 

只要对应的Builder类有默认构造方法,就可以采用下面的方式序列化。

image.png

首先通过JSON.parseObject方法+SupportNonPublicField参数反序列化Builder对象,然后通过Builder对象的build方法来构造实体对象。

 

如果对应的Builder类没有默认构造方法,或者需要反序列化模板对象时,需要自定义JSON反序列化器。

 

8. 反序列化丢失字段值

 

Fastjson支持没有默认构造方法的类的反序列化,但存在丢失字段值的问题。


image.png

咨询过Fastjson维护人员,目前还没有解决这个bug,有待后续版本中解决。如果要反序列化这种类,可以考虑添加默认构造方法或自定义反序列化器。

 

9. 自定义反序列化器

 

对应一些类对象,需要把特殊格式文本反序列化为对象,就必须自定义反序列化器。比如:Geometry序列化文本,通常采用WKT(Well-known text)表示,便于用户快速阅读理解。


1) 全局配置反序列化器

 

通过JSON序列化全局配置指定类反序列化器:

image.png

注意:这种方式不支持类继承,必须指定到具体类。比如要序列化Point对象,就必须配置Point类的反序列化器。

 

2) 特定配置反序列化器

 

通过JSON序列化特定配置指定类反序列化器:


image.png

注意:这种方式不支持类继承,必须指定到具体类。比如要序列化Point对象,就必须配置Point类的反序列化器。

 

3) 注解配置反序列化器

 

通过JSON序列化注解配置指定类反序列化器:


image.png

 

其中:GeometryDeserializer为自定义类,这里就不贴出具体实现了。


 

《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(10) https://developer.aliyun.com/article/1232278?groupCode=java

相关文章
|
12月前
|
JSON Java fastjson
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(8)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(8)
156 0
|
12月前
|
存储 JSON Java
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(4)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(4)
|
12月前
|
JSON Java 测试技术
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(5)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(5)
|
12月前
|
JSON Java 测试技术
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(11)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(11)
|
12月前
|
JSON Java 测试技术
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(10)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(10)
100 0
|
12月前
|
JSON Java 测试技术
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(2)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(2)
101 0
|
12月前
|
JSON Java 测试技术
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(3)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(3)
|
12月前
|
JSON Java 测试技术
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(1)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(1)
|
12月前
|
JSON Java 测试技术
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(6)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(6)
|
12月前
|
消息中间件 JSON Java
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(7)
《Java单元测试实战》——编写技巧:Java单元测试技巧之JSON序列化(7)
126 0