在这篇快速的文章中,我们将看到如何使用GSON来序列化和反序列化一个通用类。由于Java Type Erasure
的存在,泛型类型信息在序列化过程中会丢失。你可以通过为你的通用类型指定正确的参数化类型来解决这个问题。Gson提供了TypeToken
类。
要在Maven2/3中使用Gson,你可以通过添加以下依赖项来使用Maven Central中的Gson版本。
<dependencies>
<!-- Gson: Java to Json conversion -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
<scope>compile</scope>
</dependency>
</dependencies>
让我们创建Box
通用类,我们将在接下来的例子中使用它。
class Box < T > {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
让我们创建一个User
POJO类。
package net.javaguides.gson;
public class User {
private int id;
private String firstName;
private String lastName;
private int age;
private String gender;
private String password;
public int getId() {
return id;
}
public void setId(int i) {
this.id = i;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + ", gender=" +
gender + "]";
}
}
package net.javaguides.gson;
import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
public class GSONGenericsExample {
public static void main(String[] args) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Box < User > type2 = new Box < > ();
User user = new User();
user.setId(100);
user.setFirstName("Ramesh");
user.setLastName("Fadatare");
user.setGender("Male");
user.setAge(28);
type2.set(user);
// Serialization of generic User type to json
Type fooType2 = new TypeToken < Box < User >> () {}.getType();
String userJson = gson.toJson(type2, fooType2);
System.out.println(userJson);
// De-serialization of generic User type to json
Box < User > box = gson.fromJson(userJson, fooType2);
System.out.println(box.get().toString());
}
}
class Box < T > {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
输出。
{
"t": {
"id": 100,
"firstName": "Ramesh",
"lastName": "Fadatare",
"age": 28,
"gender": "Male"
}
}
User [id=100, firstName=Ramesh, lastName=Fadatare, age=28, gender=Male]
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/10/gson-serializing-and-deserializing-generic-types.html
内容来源于网络,如有侵权,请联系作者删除!