В этой главе мы обсудим сериализацию / десериализацию массивов, коллекций и обобщений.
Пример массива
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));
пример
Давайте посмотрим сериализацию / десериализацию массива в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — 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>
пример
Давайте посмотрим сериализацию / десериализацию коллекции в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — 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 использует API отражения Java, чтобы получить тип объекта, которому должен быть сопоставлен текст Json. Но при использовании дженериков эта информация теряется во время сериализации. Чтобы противостоять этой проблеме, Gson предоставляет класс com.google.gson.reflect.TypeToken для хранения типа универсального объекта.
пример
Давайте посмотрим сериализации / десериализации Generics в действии. Создайте файл класса Java с именем GsonTester в C: \> GSON_WORKSPACE.
Файл — 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
Проверьте вывод.