Java 使用GSON自定义枚举反序列化
我需要制作以下json:Java 使用GSON自定义枚举反序列化,java,enums,customization,deserialization,gson,Java,Enums,Customization,Deserialization,Gson,我需要制作以下json: [ { "contentType": "folder" }, { "contentType": "image" }, { "contentType": "video" } ] 在这样的数组中解析: FileStructureElement [] elements[]; 具有: public class FileStructureElement { private ElementType contentType; } public enum Elem
[ { "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解析。有人能帮我吗
检查我解析的属性的值并选择是否加载枚举值,这对我没有帮助,因为我无法控制与之交谈的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();
只需为提供的字符串返回正确的枚举值。如果要自定义枚举解析,需要注册适配器
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();
只需为提供的字符串返回正确的枚举值。您应该为类指定definition@user1488644谢谢你的建设性评论。我进一步简化并修改了我的问题。希望你现在能帮助我。你应该给我上课definition@user1488644谢谢你的建设性评论。我进一步简化并修改了我的问题。希望你现在能帮助我。