您可以創建一個TypeAdapter
,是這樣的:
public static class StudentAdapter extends TypeAdapter<Student> {
public void write(JsonWriter writer, Student student)
throws IOException {
if (student == null) {
writer.nullValue();
return;
}
writer.beginObject();
writer.name("name");
writer.value(student.name);
writer.name("sequence");
writeSequence(writer, student.sequence);
writer.endObject();
}
private void writeSequence(JsonWriter writer, List<Integer> seq)
throws IOException {
writer.beginObject();
for (int i = 0; i < seq.size(); i++) {
writer.name("index_" + i);
writer.value(seq.get(i));
}
writer.endObject();
}
@Override
public Student read(JsonReader in) throws IOException {
// This is left blank as an exercise for the reader
return null;
}
}
然後用
GsonBuilder b = new GsonBuilder();
b.registerTypeAdapter(Student.class, new StudentAdapter());
Gson g = b.create();
註冊它如果你運行這個用一個例子學生:
Student s = new Student();
s.name = "John Smith";
s.sequence = ImmutableList.of(1,3,4,7); // This is a guava method
System.out.println(g.toJson(s));
輸出:
{"name":"John Smith","sequence":{"index_0":1,"index_1":3,"index_2":4,"index_3":7}}
//這是留給讀者的一個練習......不錯的一個:) @ durron597 – Kaushik
@Kaushik他只問如何序列化,而不是反序列化:-) – durron597
很酷的答案,它總是很棒學習新東西! – epoch