- Gson 教程
- Gson - 主页
- 概述 - Gson
- 环境设置 - Gson
- 入门应用程序 - Gson
- 类 - Gson
- 对象序列化 - Gson
- 数据绑定 - Gson
- 对象数据绑定 - Gson
- 树模型 - Gson
- 流式处理 - Gson
- Gson - 序列化示例
- 序列化内部类 - Gson
- 自定义类型适配器 - Gson
- Null 对象支持 - Gson
- 版本化支持 - Gson
- 从序列化中排除字段
- 有用的 Gson 资源
- 快速指南 - Gson
- 有用的资源 - Gson
- 讨论 - Gson
Gson - 序列化示例
在本章中,我们将讨论数组、集合和泛型的序列化/反序列化。
数组示例
int[] marks = {100,90,85};
//Serialization
System.out.println("marks:" + gson.toJson(marks));
//De-serialization
marks = gson.fromJson("[100,90,85]", int[].class);
System.out.println("marks:" + Arrays.toString(marks));
示例
让我们看看数组序列化/反序列化操作。在 C:\>GSON_WORKSPACE 中创建一个名为 GsonTester 的 Java 类文件。
文件− GsonTester.java
import java.util.Arrays;
import com.google.gson.Gson;
public class GsonTester {
public static void main(String args[]) {
Gson gson = new Gson();
int[] marks = {100,90,85};
String[] names = {"Ram","Shyam","Mohan"};
//Serialization
System.out.print("{");
System.out.print("marks:" + gson.toJson(marks) + ",");
System.out.print("names:" + gson.toJson(names));
System.out.println("}");
//De-serialization
marks = gson.fromJson("[100,90,85]", int[].class);
names = gson.fromJson("[\"Ram\",\"Shyam\",\"Mohan\"]", String[].class);
System.out.println("marks:" + Arrays.toString(marks));
System.out.println("names:" + Arrays.toString(names));
}
}
验证结果
使用以下命令编译类:javac 编译器 −
C:\GSON_WORKSPACE>javac GsonTester.java
现在运行 GsonTester,查看结果 −
C:\GSON_WORKSPACE>java GsonTester
验证输出。
{marks:[100,90,85],names:["Ram","Shyam","Mohan"]}
marks:[100, 90, 85]
names:[Ram, Shyam, Mohan]
集合示例
List marks = new ArrayList();
//Serialization
System.out.println("marks:" + gson.toJson(marks));
//De-serialization
//get the type of the collection.
Type listType = new TypeToken<list>(){}.getType();
//pass the type of collection
marks = gson.fromJson("[100,90,85]", listType);
System.out.println("marks:" +marks);</list>
示例
让我们看看集合序列化/反序列化操作。在 C:\&gt;GSON_WORKSPACE 中创建一个名为 GsonTester 的 Java 类文件。
文件− GsonTester.java
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTester {
public static void main(String args[]) {
Gson gson = new Gson();
Collection<Integer> marks = new ArrayList<Integer>();
marks.add(100);
marks.add(90);
marks.add(85);
//Serialization
System.out.print("{");
System.out.print("marks:" + gson.toJson(marks));
System.out.println("}");
//De-serialization
Type listType = new TypeToken<Collection<Integer>>(){}.getType();
marks = gson.fromJson("[100,90,85]", listType);
System.out.println("marks:" +marks);
}
}
验证结果
使用以下命令编译类:javac 编译器 −
C:\GSON_WORKSPACE>javac GsonTester.java
现在运行 GsonTester,查看结果 −
C:\GSON_WORKSPACE>java GsonTester
验证输出。
{marks:[100,90,85]}
marks:[100, 90, 85]
泛型示例
Gson 使用 Java 反射 API 获取将 JSON 文本映射到的对象的类型。但是,使用泛型,此信息会在序列化期间丢失。为了解决此问题,Gson 提供了一个类 com.google.gson.reflect.TypeToken 来存储泛型对象的类型。
示例
让我们看看泛型序列化/反序列化操作。在 C:\&gt;GSON_WORKSPACE 中创建一个名为 GsonTester 的 Java 类文件。
文件− GsonTester.java
import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTester {
public static void main(String args[]) {
// create a shape class of type circle.
Shape<Circle> shape = new Shape<Circle>();
// Create a Circle object
Circle circle = new Circle(5.0);
//assign circle to shape
shape.setShape(circle);
Gson gson = new Gson();
// Define a Type shapeType of type circle.
Type shapeType = new TypeToken<Shape<Circle>>() {}.getType();
//Serialize the json as ShapeType
String jsonString = gson.toJson(shape, shapeType);
System.out.println(jsonString);
Shape shape1 = gson.fromJson(jsonString, Shape.class);
System.out.println(shape1.get().getClass());
System.out.println(shape1.get().toString());
System.out.println(shape1.getArea());
Shape shape2 = gson.fromJson(jsonString, shapeType);
System.out.println(shape2.get().getClass());
System.out.println(shape2.get().toString());
System.out.println(shape2.getArea());
}
}
class Shape <T> {
public T shape;
public void setShape(T shape) {
this.shape = shape;
}
public T get() {
return shape;
}
public double getArea() {
if(shape instanceof Circle) {
return ((Circle) shape).getArea();
} else {
return 0.0;
}
}
}
class Circle {
private double radius;
public Circle(double radius){
this.radius = radius;
}
public String toString() {
return "Circle";
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getArea() {
return (radius*radius*3.14);
}
}
验证结果
使用以下命令编译类:javac 编译器 −
C:\GSON_WORKSPACE>javac GsonTester.java
现在运行 GsonTester,查看结果 −
C:\GSON_WORKSPACE>java GsonTester
验证输出。
{"shape":{"radius":5.0}}
class com.google.gson.internal.LinkedTreeMap
{radius = 5.0}
0.0
class Circle
Circle
78.5
广告