当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

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

发表于: 2014-08-08   作者:bit1129   来源:转载   浏览:
摘要: 父类     package inheritance.test2; import java.util.Map; public class Model { private String field1; private String field2; private Map<String, String> infoMap

父类

 

 

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二]继承关系的POJO的反序列化

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在详细介绍Gson的序列化和反序列化之前,先通过自己在开发过程中遇到的一个问题以及简单的解决方案
1、生成序列化文件 为方便分析,Person对象进行了调整,如下: package com.test; import java.io.S
以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的
本文是客户端访问Web Service--参数类型的序列化与反序列化(一) 这篇文章的后续部分.今天学习的主要
本文内容按如下方式组织: 第一部分给出了序列化和反序列化的定义,以及其在通讯协议中所处的位置;
最近公司项目中用到了Json操作,从.NET后台读取数据,通过Json转化在传给“Andiron”端呈现,于是通
原文出处:http://www.ibm.com/developerworks/cn/java/j-lo-serial/ 引言 将 Java 对象序列化为二
windows phone学习也有一段时间了,想要做一个新闻客户端练练手,于是就在网上找看有没有接口之类。
基本概念: 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流
序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号