在Gson中编写适配器有更好的方法吗?

jhiyze9q  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(153)

所以我对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();
}
doinxwow

doinxwow1#

您可以为json结构中定义的每个复杂对象定义一个TypeAdapter。这可以减少实际TypeAdapter中的代码,并在sub-TypeAdapter中驱逐出境子对象的创建。

说明类型适配器类

public class DescriptionTypaAdapter extends TypeAdapter<Description> {

    @Override
    public void write(JsonWriter jsonWriter, Description description) throws IOException {
        jsonWriter.beginObject();

        jsonWriter.name("extra");
        jsonWriter.beginArray();
        // Call specific TypeAdapter to handle transformation of Extra object to Json
        TypeAdapter<Extra> extraTypeAdapter = new Gson().getAdapter(Extra.class);
        for (Extra extra : description.getExtras()) {
            extraTypeAdapter.write(jsonWriter, extra);
        }
        jsonWriter.endArray();

        jsonWriter.name("text");
        jsonWriter.value(description.getText());

        jsonWriter.endObject();

    }
}

额外类型适配器类

public class ExtraAdapter extends TypeAdapter<Extra> {

    @Override
    public void write(JsonWriter jsonWriter, Extra extra) throws IOException {
        jsonWriter.beginObject();
        // Put here Extra Json build  
        if (extra.isBold()) {
            jsonWriter.name("bold");
            jsonWriter.value(true);
        }
        ...

        jsonWriter.endObject();
    }
}

相关问题