我需要制作以下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中的一个可能值是“default”,这不是有效的枚举值。此外,我希望没有小写名称的枚举值。这基本上意味着我需要定制GSON解析。有人可以帮我吗?
来自here的想法(检查我解析的属性的值并选择是否加载枚举值)对我没有帮助,因为我无法控制与之交谈的Web服务接口并且这些值太明显了,我冒险将它们作为其他一些json引用的值存在。
答案 0 :(得分:3)
如果要为枚举进行自定义解析,则需要注册适配器
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();
只需为提供的字符串返回正确的枚举值。