GSON - 串行化和反串行化通用类型

x33g5p2x  于2022-10-07 转载在 其他  
字(2.6k)|赞(0)|评价(0)|浏览(296)

在这篇快速的文章中,我们将看到如何使用GSON来序列化和反序列化一个通用类。由于Java Type Erasure的存在,泛型类型信息在序列化过程中会丢失。你可以通过为你的通用类型指定正确的参数化类型来解决这个问题。Gson提供了TypeToken类。

GSON的Maven依赖性

要在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]

相关文章

微信公众号

最新文章

更多