`
bit1129
  • 浏览: 1068065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Gson二]继承关系的POJO的反序列化

 
阅读更多

父类

 

 

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只包含自己感兴趣的内容

 

 

 

分享到:
评论

相关推荐

    gson-2.8.6.rar

    1. JSON到Java对象的反序列化:Gson能够将JSON字符串解析成相应的Java对象,如POJO(Plain Old Java Object)或者基本数据类型。例如,一个JSON字符串`{"name":"John", "age":30}`可以被解析成一个包含姓名和年龄...

    fx-gson:一组Google Gson的类型适配器,使JavaFX属性序列化更加自然

    FX Gson只需删除属性“包装”,然后将值的序列化委托给Gson。 这意味着在序列化该类型的属性时,将考虑您添加到Gson的有关该类型的任何配置。 对于对象和基元来说确实如此。 为什么使用FX Gson? 在JavaFX中,POJO...

    java 序列化

    - **Jackson**:它是一个快速、功能丰富的JSON库,提供了多种方式(如JsonNode、POJO、流API等)处理JSON数据,同时支持JSON序列化和反序列化。 - **Gson**:Google开发的库,能够直接将Java对象转换为JSON字符串...

    gson-2.2.jar.zip

    4. **序列化和反序列化的自定义**:对于需要特殊处理的字段,Gson允许你使用注解来控制序列化和反序列化的行为。比如,`@Expose`注解可以标记需要被转换的字段,`@SerializedName`可以重命名JSON键。 5. **日期时间...

    Java中Gson的使用详解

    Gson是Google提供的一个用于将Java对象序列化和反序列化为JSON的库。它提供了fromJson()和toJson()两个方法,用于实现反序列化和序列化。下面将对Gson的基本用法和属性重命名进行详细介绍。 一、Gson的基本用法 ...

    GsonFHIR:FHIR的Gson序列化类

    格森·菲尔FHIR的Gson序列化类概述该库包含所有491个FHIR资源和STU3定义的引用类型,并建模为带有适当Gson序列化注释的旧Java类(POJO)。 这是使用基于JSON的FHIR事务序列化的Java应用程序的便捷库。伪像Maven:...

    JDK1.8中文API+Json对象直转pojo类实例.rar

    在Java开发中,JDK是Java Development Kit的缩写,它是Oracle公司提供的用于开发和运行Java应用程序的工具...通过学习和实践这些知识,你可以更好地处理Java中的数据序列化和反序列化,以及在运行时动态操作类和对象。

    POJO-Best-Practice:创建模型POJO的Android最佳实践

    - 在序列化和反序列化时,可以结合Parcelable和Gson,但需要注意序列化和反序列化过程中的类型转换问题。 10. **Equality and Hashing**: - 为确保正确比较,重写equals()和hashCode()方法。对于基于属性的比较...

    DOM4J,Jaxen,XStream,FastJson,Gson

    3. XStream:XStream是一个用于在Java对象和XML之间进行映射的库,它提供了一种简单的方式来序列化和反序列化Java对象。XStream的强大之处在于其直观的API,开发者可以直接使用Java对象,而无需编写大量的XML绑定...

    Json2Pojo:IntelliJ插件,可以通过GSON批注和访问器轻松地从JSON创建Java POJO。

    Json2Pojo IntelliJ插件,可以使用GSON批注和访问器从JSON轻松创建Java POJO。 用法 通过打开首选项-&gt;插件-&gt;搜索“ Json2Pojo”,将插件安装在... 该插件将在目标目录中生成您的新类,以便通过GSON轻松反序列化。

    json式用法

    总结来说,"json式用法"主要涉及JSON的使用,特别是使用Gson库在Java中进行JSON操作,包括序列化、反序列化、处理复杂数据类型等。提供的jar包、示例代码和方法封装笔记都是为了帮助理解并有效地实践这些概念。在...

    jackson工具类

    它提供了高效、灵活的JSON序列化和反序列化功能,使得Java对象能够轻松地转换为JSON格式,反之亦然。Jackson 2.2.1是该库的一个版本,包含了核心组件和多个模块,以支持不同场景下的JSON操作。 1. **序列化与反序列...

    jacksonAll

    Jackson还支持许多高级特性,如类型安全的POJO(Plain Old Java Object)反序列化、支持泛型、处理复杂JSON结构(如嵌套对象和数组)、数据绑定到非JavaBean对象、以及高效的树模型(JsonNode)等。此外,它也兼容...

    json所依赖的jar包

    1. Jackson:一个高性能的JSON处理器,提供了丰富的API,支持JSON的序列化和反序列化,以及JSON到POJO的映射。 2. Gson:Google提供的一个库,能够将Java对象转换为JSON格式的字符串,反之亦然。 3. JSON-P:Java...

    parse xml string from url to POJO

    首先,定义对应的POJO类,然后使用`SimpleXMLSerializer`进行反序列化: ```java @Root(name = "root") public class MyPojo { @Element private String someField; // ...其他字段 } Serializer ...

    jsonschema2pojo-bacta-archive:用于 json 模式代码生成的自定义规则工厂

    3. **扩展功能**:可能提供了额外的注解支持,使生成的Java类具有更丰富的元信息,如Jackson或Gson的注解,以控制序列化和反序列化的行为。 4. **错误处理和日志**:可能包含了更好的错误处理机制和详细的日志输出...

    json串解析

    这两个库都提供了简单易用的API来序列化和反序列化JSON对象。 1. Jackson库: Jackson是Java中最流行的JSON处理库之一,它由 FasterXML 组织维护。使用Jackson,我们可以将JSON字符串转换为Java对象,反之亦然。...

    json转换fastjson1.7.2jar

    在Java开发中,Fastjson是阿里巴巴提供的一款高效、强大的JSON库,它具有极快的性能,广泛的功能以及友好的API,使得JSON序列化和反序列化变得简单。 Fastjson 1.7.2 版本是该库的一个稳定版本,提供了多种操作JSON...

    java中json处理的使用.doc

    - `CycleDetectionStrategy`是`JsonConfig`的一个属性,用于防止在序列化和反序列化过程中出现无限循环引用的问题。例如,如果一个对象引用了自身或形成了一个循环引用链,不开启循环检测可能会导致程序崩溃。 5. ...

    java中ArrayListMapObject与Json互相转换.pdf

    在Java编程中,经常需要处理数据的序列化和反序列化,其中ArrayList&lt;Map&lt;Object&gt;&gt;与JSON之间的转换是一个常见的需求。JSON是一种轻量级的数据交换格式,广泛用于互联网应用中的数据传输,因为它易于阅读和编写,同时...

Global site tag (gtag.js) - Google Analytics