使用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 条评论
登录 后参与评论

相关文章

使用 Gson 反序列化具有多种类型的列表列表

GSON 反序列化/序列化层次结构类

Jackson 的多态序列化/反序列化和自定义序列化器/反序列化器

GSON 无法反序列化数组

在 kotlin 中使用 Gson 进行 Json 反序列化

Google Gson 反序列化问题

JSON 未反序列化为自定义类

如何从两个序列化程序创建自定义输出 JSON

来自序列化的基于自定义注释的忽略字段

Django Rest Framework 序列化使用自定义数据类型归档的持续时间

asp.net core httpget 方法无法反序列化枚举数组

如何使用 .net Sdk 版本 3 使用自定义序列化调用 CosmosDb 上的存储过程?

自定义类的对象列表的json序列化

使用自定义反序列化器 Jackson 将 .json 文件转换为 Java 对象

Rust 将 JSON 反序列化为自定义 HashMap<String, google_firestore1::Value>

如何使用自定义序列化程序对使用 NEST 和 Elasticsearch 的子文档也序列化类型信息

如何使用 System.Text.Json 序列化/反序列化非枚举类型的嵌套字典?

如何自定义嵌套序列化程序中的字段?

包含成员/属性的属性的类的 C# JSON 自定义序列化

如何将自定义 json 反序列化为 c# 对象

使用 Json 反序列化

Django Rest Framework 序列化自定义字段

设置条件序列化器类删除自定义序列化器类以在 Django 休息框架中执行额外操作

Newtonsoft JSON - 如何反序列化自定义集合?

使用 GSON 將 JSON 反序列化為 Java 對象時遇到問題

如何使用 GSON 反序列化數組內部的 Double 數組?

如何序列化自定义多对多模型 django?

如何在 Ktor 的小写字母中序列化/反序列化枚举?

JSON.Net - 如何反序列化自定义类型的嵌套字段

在 sql server 中序列化使用 OpenJson() 反序列化的对象