Пропуск имени HashMap во время сериализации gson - PullRequest
0 голосов
/ 03 октября 2018

Я хочу сериализовать свой класс, используя gson, но я хотел бы опустить имя hashmap.Это возможно с GSON?

Я попытался написать свой собственный TypeAdapter, но имя карты по-прежнему записывается как родительский объект.

У меня есть класс, который выглядит как

public class myClass {
    @Expose
    public Long timestamp;
    @Expose
    public String id;
    @Expose
    public HashMap<String, someOtherClass> myMap = new HashMap<>();

    @Override
    public String toString() {
        Gson gson = new GsonBuilder()
                .excludeFieldsWithoutExposeAnnotation()
                .create();

        return gson.toJson(this);
    }
}

текущий вывод:

{
  "timestamp": 1517245340000,
  "id": "01",
  "myMap": {
    "mapKey1": {
      "otherClassId": "100", // works as expected
    }
    "mapKey2": {
      "otherClassId": "101", // works as expected
    }
  }
}

Что я надеюсь получить:

{
  "timestamp": 1517245340000,
  "id": "01",
  "mapKey1": {
      "otherClassId": "100", // works as expected
  },
  "mapKey2": {
      "otherClassId": "100", // works as expected
  }
}

1 Ответ

0 голосов
/ 03 октября 2018

Напишите свой собственный TypeAdapter.См., Например, javadoc.

Укажите его с аннотацией @JsonAdapter или зарегистрируйте с помощью GsonBuilder.

@JsonAdapter(MyClassAdapter.class)
public class MyClass {
    public Long timestamp;
    public String id;
    public HashMap<String, SomeOtherClass> myMap = new HashMap<>();
}
public class MyClassAdapter extends TypeAdapter<MyClass> {
    @Override public void write(JsonWriter out, MyClass myClass) throws IOException {
        // implement the write method
    }
    @Override public MyClass read(JsonReader in) throws IOException {
        // implement the read method
        return ...;
    }
}
...