美文网首页
Gson的使用--序列化

Gson的使用--序列化

作者: 董成鹏 | 来源:发表于2018-07-09 00:12 被阅读0次

继续使用反序列化中提到的例子。
考虑把如下Java Bean

public class Book {
  private String[] authors;
  private String isbn10;
  private String isbn13;
  private String title;
  // Methods removed for brevity
}

序列化成Json

{
  "title": "Java Puzzlers: Traps, Pitfalls, and Corner Cases",
  "isbn-10": "032133678X",
  "isbn-13": "978-0321336781",
  "authors": [
    "Joshua Bloch",
    "Neal Gafter"
  ]
}

在不使用注解的情况下,Java bean当中的isbn10isbn13是无法序列化成Json中的isbn-10isbn-13的。我们可以通过自定义Json序列化器来实现这一转换。

public class BookSerialiser implements JsonSerializer{
  public JsonElement serialize(final Book book, final Type typeOfT,
    JsonSerializationContext context){
        //这样就把java bean中的字段对应到Json中的字段了
        final JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("title", book.getTitle());
        jsonObject.addProperty("isbn-10", book.getIsbn10());
        jsonObject.addProperty("isbn-13", book.getIsbn13());

        final JsonArray jsonAuthorsArray = new JsonArray();
        for (final String author : book.getAuthors()) {
            final JsonPrimitive jsonAuthor = new JsonPrimitive(author);
            jsonAuthorsArray.add(jsonAuthor);
        }
        jsonObject.add("authors", jsonAuthorsArray);
        return jsonObject;
  }
}

同理,在使用我们自定义的序列化器之前,我们也要向Gson注册我们的序列化器,

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Book.class, new BookSerialiser());

那接下来我们考虑对象的嵌套,如下

{
  "title": "Java Puzzlers: Traps, Pitfalls, and Corner Cases",
  "isbn": "032133678X",
  "authors": [
    {
      "id": 1,
      "name": "Joshua Bloch"
    },
    {
      "id": 2,
      "name": "Neal Gafter"
    }
  ]
}

首先定义我们的Author bean:

public class Author {

  private int id;
  private String name;

  // Methods removed for brevity

}

修改我们的Book bean

public class Book {

  private Author[] authors;
  private String isbn;
  private String title;

  // Methods removed for brevity

}

和反序列化一样,我们修改BookSerialiser来使用JsonSerializationContext实现对于Author的序列化

public class BookSerialiser implements JsonSerializer<Book> {

  @Override
  public JsonElement serialize(final Book book, final Type typeOfSrc, final JsonSerializationContext context) {
    final JsonObject jsonObject = new JsonObject();
    jsonObject.addProperty("title", book.getTitle());
    jsonObject.addProperty("isbn", book.getIsbn());

    //使用context来序列化Author
    final JsonElement jsonAuthros = context.serialize(book.getAuthors());
    //把结果加入jsonObject
    jsonObject.add("authors", jsonAuthros);

    return jsonObject;
  }
}

这个和反序列化很类似,如果大家读过反序列化那篇文章,应该很容易理解这个。

相关文章

  • Tools

    完全理解Gson(3):Gson反序列化 完全理解Gson(2):Gson序列化 完全理解Gson(1):简单入门...

  • Gson完全教程:基础篇

    Gson是google推出的用于Java对象和JSON之间序列化和反序列化的公开库。使用Gson可以使我们的JSO...

  • Gson基本用法

    Gson是谷歌官方推出的 JSON 包。 一. 导入Android Studio工程 二. 序列化 使用Gson将...

  • Gson 系列文章

    gson教程 1、Gson - Java-JSON 序列化和反序列化入门2、Gson - 映射嵌套对象3、Gson...

  • Gson解析JSON

    1. 开始 构建maven项目 实体类 2. gson解析对象 3. gson反序列化 4、Gson高级使用 1、...

  • Gson的使用

    序列化对象: Gson gson = new Gson();String json = gson.toJson(o...

  • Gson教程五(译):Sets的映射

    该文章翻译自Gson Tutorial Series系列教程。该篇主要阐述了如何使用Gson映射Sets。 序列化...

  • Gson之@Expose

    Gson注解之 @Expose 的作用: 控制某个属性是否参与 JSON的序列化 or 反序列化。 代码使用示例:...

  • Gson教程 Apache POI教程 Guava教程Apac

    Gson教程 Gson概述Gson环境设置Gson第一个应用Gson classGson对象序列化Gson数据绑定...

  • Kotlin Model类在Json反序列化过程为空性探索

    定义一个JsonModel类。 JsonModel类所有字段都声明为非空类型 使用Gson类进行反序列化,Gson...

网友评论

      本文标题:Gson的使用--序列化

      本文链接:https://www.haomeiwen.com/subject/wsvjuftx.html