所以我对Gson作为一个库和Java还是很陌生的。我觉得有一个更好的方法来编写write函数。我必须创建一个自定义适配器的原因是因为json有时会返回一个字符串而不是一个对象。总之,这是我的代码:)
@Override
public void write(JsonWriter jsonWriter, Description description) throws IOException {
jsonWriter.beginObject();
jsonWriter.name("extra");
jsonWriter.beginArray();
List<Extra> extra = description.getExtra();
for (int i = 0; i < extra.size(); i++) {
writeExtra(jsonWriter, extra.get(i));
}
jsonWriter.endArray();
jsonWriter.name("text");
jsonWriter.value(description.getText());
jsonWriter.endObject();
}
private void writeExtra(JsonWriter jsonWriter, Extra extra) throws IOException {
jsonWriter.beginObject();
if (extra.isBold()) {
jsonWriter.name("bold");
jsonWriter.value(true);
}
if (extra.isStrikeThrough()) {
jsonWriter.name("strikeThrough");
jsonWriter.value(true);
}
if (extra.getColor() != null) {
jsonWriter.name("color");
jsonWriter.value(extra.getColor());
}
if (extra.getExtra() != null) {
jsonWriter.name("extra");
jsonWriter.beginArray();
for (int i = 0; i < extra.getExtra().size(); i++) {
writeExtra(jsonWriter, extra.getExtra().get(i));
}
jsonWriter.endArray();
}
if (extra.getText() != null) {
jsonWriter.name("text");
jsonWriter.value(extra.getText());
}
jsonWriter.endObject();
}
1条答案
按热度按时间doinxwow1#
您可以为json结构中定义的每个复杂对象定义一个
TypeAdapter
。这可以减少实际TypeAdapter
中的代码,并在sub-TypeAdapter中驱逐出境子对象的创建。说明类型适配器类
额外类型适配器类