使用GSON自定义反序列化枚举

鲍里斯·斯特兰杰夫(Boris Strandjev)

我需要制作以下json:

[ { "contentType": "folder" },
  { "contentType": "image" },
  { "contentType": "video" }
]

解析成这样的数组:

FileStructureElement [] elements[];

具有:

public class FileStructureElement {
    private ElementType contentType;
}

public enum ElementType {
    FOLDER, IMAGE, VIDEO, DEFAULT;
}

这是一个简化的示例,FileStructureElement类具有更多的属性,与问题字段无关。

我想将contentTypeproperty的值加载为的值ElementType我负担不起使枚举的值与json的类型匹配,因为json中的可能值之一是“ default”,这不是有效的枚举值。此外,我不希望使用小写名称的枚举值。这基本上意味着我需要自定义GSON解析。有人可以帮我吗?

这里的想法(检查我解析的属性的值并选择是否加载枚举值)对我没有帮助,因为我无法控制要与之交谈的Web服务接口,并且这些值太明显了,我冒着风险,它们也将作为其他json属性的值出现。

绒球

如果要对枚举进行自定义解析,则需要注册适配器

JsonDeserializer<?> jd = new JsonDeserializer<ElementType>() {
  @Override
  public ElementType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    String enumStr = json.getAsString();
    ElementType val = 
    //...

    return val;
  }
};

Gson gson = new GsonBuilder().registerTypeAdapter(ElementType.class, jd).create();

只需为提供的String返回正确的枚举值即可。

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

反序列化对象的Arraylist

분류에서Dev

C#Json反序列化失败

분류에서Dev

使用jdbc-message-channel的序列化错误

분류에서Dev

Excel 2010:使用图标列表作为自定义列表

분류에서Dev

Json编码或序列化XML

분류에서Dev

Laravel自定义变形

분류에서Dev

自定义tableViewCell中的NSTimer

분류에서Dev

在自定义排除条件下使用strip_tags

분류에서Dev

如何使用d3.domain / range拥有自定义域

분류에서Dev

如何仅对选定域使用自定义DNS服务器?

분류에서Dev

如何在自定义服务器上使用ember-cli并将其部署到Heroku?

분류에서Dev

如何在Windows 8中使用通过Microsoft键盘布局创建器创建的自定义键盘布局?

분류에서Dev

在IE中自定义“您最受欢迎的网站”?

분류에서Dev

带有自定义页面的新Relic插件

분류에서Dev

Android Studio无法识别自定义视图类

분류에서Dev

自定义非嵌套余烬路线的加载模板

분류에서Dev

带有删除和通知通知的自定义arraylist

분류에서Dev

Cordova / Phonegap自定义构建文件名

분류에서Dev

自定义水平滚动条逻辑

분류에서Dev

protobuf-net:回调,用于确定要序列化的对象

분류에서Dev

REST错误响应和客户端服务器POJO序列化

분류에서Dev

如何使用gson获取模型中定义的属性值

분류에서Dev

比较具有替代顺序的自定义类型的std :: tuple(或std :: pair)。是否可以插入自定义小于/比较功能?

분류에서Dev

子类的C#XML序列化-从根节点删除xmlns:p1和p1:type属性

분류에서Dev

用请求数据覆盖序列化程序,该请求数据包括缺少键的空值

분류에서Dev

带有Kingpin注释的Apple MapKit将自定义注释聚类

분류에서Dev

状态列表可绘制的自定义单选按钮未更改

분류에서Dev

Codeigniter查询结果返回带有setter的自定义结果对象

분류에서Dev

spring-boot不评估基于自定义百里香方言的标签

Related 관련 기사

  1. 1

    反序列化对象的Arraylist

  2. 2

    C#Json反序列化失败

  3. 3

    使用jdbc-message-channel的序列化错误

  4. 4

    Excel 2010:使用图标列表作为自定义列表

  5. 5

    Json编码或序列化XML

  6. 6

    Laravel自定义变形

  7. 7

    自定义tableViewCell中的NSTimer

  8. 8

    在自定义排除条件下使用strip_tags

  9. 9

    如何使用d3.domain / range拥有自定义域

  10. 10

    如何仅对选定域使用自定义DNS服务器?

  11. 11

    如何在自定义服务器上使用ember-cli并将其部署到Heroku?

  12. 12

    如何在Windows 8中使用通过Microsoft键盘布局创建器创建的自定义键盘布局?

  13. 13

    在IE中自定义“您最受欢迎的网站”?

  14. 14

    带有自定义页面的新Relic插件

  15. 15

    Android Studio无法识别自定义视图类

  16. 16

    自定义非嵌套余烬路线的加载模板

  17. 17

    带有删除和通知通知的自定义arraylist

  18. 18

    Cordova / Phonegap自定义构建文件名

  19. 19

    自定义水平滚动条逻辑

  20. 20

    protobuf-net:回调,用于确定要序列化的对象

  21. 21

    REST错误响应和客户端服务器POJO序列化

  22. 22

    如何使用gson获取模型中定义的属性值

  23. 23

    比较具有替代顺序的自定义类型的std :: tuple(或std :: pair)。是否可以插入自定义小于/比较功能?

  24. 24

    子类的C#XML序列化-从根节点删除xmlns:p1和p1:type属性

  25. 25

    用请求数据覆盖序列化程序,该请求数据包括缺少键的空值

  26. 26

    带有Kingpin注释的Apple MapKit将自定义注释聚类

  27. 27

    状态列表可绘制的自定义单选按钮未更改

  28. 28

    Codeigniter查询结果返回带有setter的自定义结果对象

  29. 29

    spring-boot不评估基于自定义百里香方言的标签

뜨겁다태그

보관