Gson使用文档(集合必须是带泛型的,从而必须用new TypeToken,匿名类,getType())...

原文 :http://www.jianshu.com/p/558844c96fc1

 

 

1.概述
2.Gson的目标
3.Gson的性能和扩展性
4.Gson的使用者
5.如何使用Gson

  • 通过Maven来使用Gson
  • 基本举例
  • 对象举例
  • 使用对象的好处
  • 嵌套类(包括内部类)
  • 数组举例
  • 集合举例
  • 集合的局限性
  • 泛型的序列化和反序列化
  • 任意类型集合的序列化和反序列化
  • 内置的序列化器和反序列化器
  • 定制的序列化和反序列化
    • 写一个序列化解释器
    • 写一个反序列化解释器
  • 写一个实例化工厂(Writing a Instance Creator)
    • 一个参数化类型的实例工厂(InstanceCreator for a Parameterized Type)
  • 简洁和美观的Json格式化输出
  • 支持Null对象
  • 支持版本化
  • 忽略序列化和反序列化中的字段
    • Java修饰符忽略
    • Gson's @Expose
    • 自定义忽略策略
  • JSON字段取名帮助
  • 通过经典的序列化器和反序列化器分享状态

  • 6.在设计Gson中一些问题
    7.未来Gson需要加强的方面

概述


Gson是一个Java库,它不仅可以把Java对象转化为Json格式,它也能将一段Json格式的字符串转化为相对于的Java对象。
Gson适用于所有Java对象,即使是那些你不知道源代码的对象。

Gson的目标

  • 提供简单易用的方法比如 toString() ,构造方法来转化JAVA为JSON以及反转化。
  • 提供已存在的不可修改对象转化为JSON以及反转化。
  • 提供对象的惯例表示
  • 支持任意复杂对象
  • 生成健壮 可读的JSON输出

Gson的性能和扩展性


这里提供我们跑测试的电脑配置(dual opteron, 8GB RAM, 64-bit Ubuntu),你可以通过使用PerformanceTest类来运行测试

  • 能正常反序列化25MB大小的字符串(参照 PerformanceTest中的disabled_testStringDeserializationPerformance)
  • 超大集合:
    • 能正常序列化一百四十万对象(参见PerformanceTest中的disabled_testLargeCollectionSerialization)
    • 能正常反序列化87000个对象的集合(参见PerformanceTest中的disabled_testLargeCollectionDeserialization)
  • Gson 1.4 将反序列的字节数组和集合限制从80KB提高到11MB。
    注意:删除 disabled_前缀 来运行这些TEST,我们使用这个前缀来阻止运行这些测试样例当我们运行Junit的测试样例。

Gson的使用者


Gson最初创建是为了Google内部大量的项目所使用,它现在被很多的开源项目和公司使用。

使用Gson


你可以使用 new Gson()方法 作为使用Gson的开始。 还有一个类GsonBuilder来创建一个Gson实例, 通过这个类你可以设置各种参数包括版本控制等等...

当你调用Json操作时,Gson实例不会维护任何状态, 所以你可以所以复用相同的对象来重复Json的序列化和反序列操作。

通过Maven来使用Gson


通过Maven2/3来使用Gson, 添加下面的依赖来在Maven使用Gson
<dependencies> <!-- Gson: Java to Json conversion --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.5</version> <scope>compile</scope> </dependency> </dependencies>
现在你的Maven项目就可以使用Gson

基础举例


// SerializationGson gson = new Gson();gson.toJson(1);// ==> 1 gson.toJson("abcd"); // ==> "abcd" gson.toJson(new Long(10)); // ==> 10 int[] values = { 1 }; gson.toJson(values); // ==> [1] // Deserialization int one = gson.fromJson("1", int.class); Integer one = gson.fromJson("1", Integer.class); Long one = gson.fromJson("1", Long.class); Boolean false = gson.fromJson("false", Boolean.class); String str = gson.fromJson("\"abc\"", String.class); String anotherStr = gson.fromJson("[\"abc\"]", String.class);

对象举例


class BagOfPrimitives { private int value1 = 1; private String value2 = "abc"; private transient int value3 = 3; BagOfPrimitives() { // no-args constructor } } // Serialization BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); String json = gson.toJson(obj); // ==> json is {"value1":1,"value2":"abc"}
注意 不要序列对象中使用循环引用,因为它将会导致无限递归
// DeserializationBagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值