Gson - Bộ điều hợp loại tùy chỉnh
Gson thực hiện tuần tự hóa / deserialization các đối tượng bằng cách sử dụng các bộ điều hợp có sẵn của nó. Nó cũng hỗ trợ các bộ điều hợp tùy chỉnh. Hãy thảo luận về cách bạn có thể tạo bộ điều hợp tùy chỉnh và cách bạn có thể sử dụng nó.
Tạo bộ điều hợp tùy chỉnh
Tạo bộ điều hợp tùy chỉnh bằng cách mở rộng TypeAdaptervà chuyển cho nó loại đối tượng được nhắm mục tiêu. Ghi đèread và write các phương pháp cần thực hiện tương ứng với tuần tự hóa và tuần tự hóa tùy chỉnh.
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
...
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
}
}
Đăng ký Bộ điều hợp tùy chỉnh
Đăng ký bộ điều hợp tùy chỉnh bằng GsonBuilder và tạo phiên bản Gson bằng GsonBuilder.
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Student.class, new StudentAdapter());
Gson gson = builder.create();
Sử dụng bộ điều hợp
Gson bây giờ sẽ sử dụng bộ điều hợp tùy chỉnh để chuyển đổi văn bản Json thành đối tượng và ngược lại.
String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}";
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
Thí dụ
Hãy xem một ví dụ về bộ điều hợp loại tùy chỉnh đang hoạt động. Tạo một tệp lớp Java có tênGsonTester trong C: \> GSON_WORKSPACE.
File − GsonTester.java
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Student.class, new StudentAdapter());
builder.setPrettyPrinting();
Gson gson = builder.create();
String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}";
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
Student student = new Student();
reader.beginObject();
String fieldname = null;
while (reader.hasNext()) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
if ("name".equals(fieldname)) {
//move to next token
token = reader.peek();
student.setName(reader.nextString());
}
if("rollNo".equals(fieldname)) {
//move to next token
token = reader.peek();
student.setRollNo(reader.nextInt());
}
}
reader.endObject();
return student;
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
writer.beginObject();
writer.name("name");
writer.value(student.getName());
writer.name("rollNo");
writer.value(student.getRollNo());
writer.endObject();
}
}
class Student {
private int rollNo;
private String name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Student[ name = "+name+", roll no: "+rollNo+ "]";
}
}
Xác minh kết quả
Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\GSON_WORKSPACE>javac GsonTester.java
Bây giờ chạy GsonTester để xem kết quả -
C:\GSON_WORKSPACE>java GsonTester
Xác minh kết quả đầu ra.
Student[ name = Mahesh, roll no: 1]
{
"name": "Mahesh",
"rollNo": 1
}