gson 如何为代理类编写自定义序列化程序

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

我需要序列化/反序列化一个带有枚举的POJO。我有以下DTO:

  1. public enum MyEnum {
  2. VAL1("val1"),
  3. VAL2("val2") {
  4. @Override
  5. public String getValue() {
  6. return "test2";
  7. }
  8. };
  9. private final String name;
  10. MyEnum(String name) {
  11. this.name = name;
  12. }
  13. public String getValue() {
  14. return name;
  15. }
  16. }
  17. public class MyPojo {
  18. public MyEnum prop;
  19. }
  20. public static void main(String... args) {
  21. Gson gson = new GsonBuilder().registerTypeAdapter(MyEnum.class, new MyEnumSeserializer());
  22. MyPojo p = new MyPojo();
  23. p.prop = MyEnum.VAL2; // and I get MyEnum$1.class and My serializer doesn't work
  24. String json = gson.toJson(p);
  25. MyPojo p1 = gson.fromJson(json, MyPojo.class);
  26. }

如何使用Gson库为代理类编写自定义序列化程序/反序列化程序?我不能使用其他库。

oxiaedzo

oxiaedzo1#

我已经找到了解决办法。需要改变

  1. new GsonBuilder().registerTypeAdapter(MyEnum.class, new MyEnumSeserializer());

  1. new GsonBuilder(). registerTypeHierarchyAdapter(MyEnum.class, new MyEnumSeserializer());

且都工作正常。

相关问题