父类
package inheritance.test2; import java.util.Map; public class Model { private String field1; private String field2; private Map<String, String> infoMap; public String getField2() { return field2; } public void setField2(String field2) { this.field2 = field2; } public String getField1() { return field1; } public void setField1(String field1) { this.field1 = field1; } public Map<String, String> getInfoMap() { return infoMap; } public void setInfoMap(Map<String, String> infoMap) { this.infoMap = infoMap; } }
子类
package inheritance.test2; public class DetailModel extends Model { private String field3; private String field4; public String getField3() { return field3; } public void setField3(String field3) { this.field3 = field3; } public String getField4() { return field4; } public void setField4(String field4) { this.field4 = field4; } }
测试类:
package inheritance.test2; import com.google.gson.Gson; import org.junit.Assert; import java.util.HashMap; import java.util.Map; public class Test { @org.junit.Test public void testGsonInheritance() { DetailModel dm = new DetailModel(); dm.setField1("field1"); dm.setField2("field2"); dm.setField3("field3"); dm.setField4("field4"); Map<String, String> im = new HashMap<String, String>(); im.put("key1","value1"); im.put("key2","value2"); im.put("key3","value3"); dm.setInfoMap(im); String str = new Gson().toJson(dm); System.out.println(str); Model model = new Gson().fromJson(str, Model.class); Assert.assertTrue(model.getField1().equals(dm.getField1())); Assert.assertTrue(model.getField2().equals(dm.getField2())); Map<String, String> map = model.getInfoMap(); Assert.assertEquals(map.size(), 3); Assert.assertNotNull(map.get("key1")); Assert.assertNotNull(map.get("key2")); dm.setInfoMap(null); str = new Gson().toJson(dm); model = new Gson().fromJson(str, Model.class); map = model.getInfoMap(); Assert.assertNull(map); } }
总结
1. 子类序列化为JSON串,JSON串反序列化为父类,相应的字段可以完成反序列化,其它字段自动抛弃,这符合面向对象的特性,子类造型为父类,通过父类可以访问父类提供的数据访问方法,子类自己的数据不能访问
2. 反序列化时,如果POJO的字段在JSON串中不存在,那么POJO的这个字段为null
3. 这个例子具有一般性,更常见的场景,从别的系统获取JSON数据串,但是JSON串内容很丰富,有些字段不是自身的系统所需要的,可以定义一个简单的POJO,在反序列化时,将感兴趣的字段和数据反序列化到POJO中,POJO只包含自己感兴趣的内容
相关推荐
fastJosn Gson Jackson 序列化和反序列化所需要的jar,已经全部验证过,请放心使用咯
Gson 中解决 json 反序列化时相同属性对应不同类型的值的问题(代码),对应文章链接:https://blog.csdn.net/ZiFung_Yip/article/details/89143255
Gson解析之自定义序列化和反序列化的代码例子,但后端对同一个字段给的数据类型与文档不一致时的处理
实现了通过gson对enum的自定义转化过程,不需要预先定义enmu,并且不需要修改gson源码,在框架顶层处理基本可以达到对enum的抽象管理。
fastjson、gson、jackson序列化和反序列化所用json文件
GSON是Google开发并开源的一个Java的JSON转换库,这里我们将来讲解GSON实现Java对象的JSON序列化与反序列化的实例教程,需要的朋友可以参考下
gson-2.0.1.jar-Json解析工具,序列化反序列化,实体类互转Json,免费jar包
集成多枚举类型统一序列化/反序列化处理,再也不用创建多个Adapter了 http://blog.csdn.net/atm008/article/details/51733849
1.2 JavaBean序列化/反序列化 1.2.1 步骤说明 普通JavaBean 嵌套JavaBean 1.3 数组和List的序列化/反序列化 1.3.1 数组的序列化/反序列化 1.3.2 List集合的序列化/反序列化 1.4 Set和Map的序列化/反序列化 1.4.1 Set...
主要讲述Json序列化与反序列化,主要使用Gson、FastJson、Jackson实现
格森Gson是一个Java库,可用于将Java对象转换为其JSON表示形式。 它还可以用于将JSON字符串转换为等效的Java对象。 Gson可以处理任意Java对象,包括您没有源代码的现有对象。 有一些开源项目可以将Java对象转换为...
gson序列化,反序列化工具包,用来做工具报表使用,
Gson jackson fastjson LoganSquare 使用demo Gson jackson fastjson LoganSquare 使用demo
Gson工具类, 对json序列化反序列化简单封装
Android基于Gson序列化和反序列化,用于存储对象到xml和从xml中解析对象
Gson反序列化原理 原理简述 gson反序列化主要分为两个过程: 根据TypeToken创建出对象 根据json字符串解析数据,对对象属性赋值 对象的创建 ConstructorConstructor.get 先尝试获取无参构造函数 失败则尝试...
使用Gson的null安全JSON反序列化。 工作正常! 有点儿。 反序列化由Gson中包含的ReflectiveTypeAdapterFactory完成,并由NullSafeTypeAdapterFactory完成检查和修复。 这不是完整的解决方案,因为...
可以将一个JSON字符串转成一个Java对象(反序列化),或者反过来(序列化)。 GSON地址:google/gson (github.com) Android引入GSON: implementation ‘com.google.code.gson:gson:2.9.0’ Gson 是 Google 提供的...
protostuff fastjson gson 高性能序列化jar包
Google gson库能够实现定制化的序列化和反序列操作,能够简化Java序列化和反序列化操作