在 gson 序列化期间省略 HashMap 名称

我希望使用 gson 序列化我的类,但我想省略哈希图名称。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

  }

}


长风秋雁
浏览 140回答 1
1回答

一只名叫tom的猫

自己写TypeAdapter。例如,参见 javadoc。用@JsonAdapter注解指定它,或者用 注册它GsonBuilder。@JsonAdapter(MyClassAdapter.class)public class MyClass {&nbsp; &nbsp; public Long timestamp;&nbsp; &nbsp; public String id;&nbsp; &nbsp; public HashMap<String, SomeOtherClass> myMap = new HashMap<>();}public class MyClassAdapter extends TypeAdapter<MyClass> {&nbsp; &nbsp; @Override public void write(JsonWriter out, MyClass myClass) throws IOException {&nbsp; &nbsp; &nbsp; &nbsp; // implement the write method&nbsp; &nbsp; }&nbsp; &nbsp; @Override public MyClass read(JsonReader in) throws IOException {&nbsp; &nbsp; &nbsp; &nbsp; // implement the read method&nbsp; &nbsp; &nbsp; &nbsp; return ...;&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java