我需要制作以下 json:
[ { "contentType": "folder" },
{ "contentType": "image" },
{ "contentType": "video" }
]
解析这样的数组:
FileStructureElement [] elements[];
拥有:
public class FileStructureElement {
private ElementType contentType;
}
public enum ElementType {
FOLDER, IMAGE, VIDEO, DEFAULT;
}
这是简化的示例,FileStructureElement
类具有更多属性,与问题字段无关。
我想将 contentType
属性的值加载为 ElementType
的值。我无法让枚举的值与 json 的类型匹配,因为 json 中的可能值之一是“默认”,这不是有效的枚举值。此外,我不希望枚举值带有小写名称。这基本上意味着我需要定制 GSON 解析。有人可以帮我吗?
想法来自here (检查我解析的属性的值并选择是否加载枚举值)对我没有帮助,因为我无法控制我与之交谈的 Web 服务接口(interface),并且这些值太明显,我冒着它们的风险还将作为其他一些 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();
只需返回所提供字符串的正确枚举值即可。
关于java - 使用 GSON 自定义枚举反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17717582/