
我正在尝试反序列化以下结构
{ Meta: { keywords: [a, b, c, d]} ... }其他有效的结构是
{ Meta: { keywords: "a,b,c,d"} ... }和
{ Meta: {keywords: "a"} ...}我有这门课
public class Data { @Propertyname("Meta") MetaData Meta; ...}public class MetaData { List<String> keywords; ...}和自定义反序列化器
public static class CustomDeserilizer implements JsonDeserializer<MetaData>{ @OverrIDe public MetaData deserialize(JsonElement Json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { List<String> keywords = null; Gson gson = new Gson(); MetaData MetaData = gson.fromJson(Json, AppMetaData.class); JsonObject JsonObject = Json.getAsJsonObject(); if (JsonObject.has("keywords")) { JsonElement elem = JsonObject.get("keywords"); if (elem != null && !elem.isJsonNull()) { if (JsonObject.get("keywords").isJsonArray()) { keywords = gson.fromJson(JsonObject.get("keywords"), new Typetoken<List<String>>() { }.getType()); } else { String keywordString = gson.fromJson(JsonObject.get("keywords"), String.class); keywords = new ArrayList<String>(); List.addAll(Arrays.asList(keywordString.split(","))); } } } MetaData.setKeywords(keywords);}然后我尝试应用deserilizer:
Gson gson = new GsonBuilder() .registerTypeAdapter(Data.class,new CustomDeserilizer()) .create();但我得到一个解析错误,因为我试图反序列化数据而不是MetaData,我如何应用这个反序列化器使其正常工作?
解决方法:
我解决了它为我的类Data创建一个反序列化器.
public static class DataDeserilizer implements JsonDeserializer { @OverrIDe public Data deserialize(JsonElement Json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { Gson gson = new Gson(); Data data = gson.fromJson(Json, Data.class); JsonObject JsonObject = Json.getAsJsonObject(); if (JsonObject.has("Meta")) { JsonElement elem = JsonObject.get("Meta"); if (elem != null && !elem.isJsonNull()) { Gson gsonDeserializer = new GsonBuilder() .registerTypeAdapter(MetaData.class, new CustomDeserilizer()) .create(); gsonDeserializer.fromJson(JsonObject.get("Meta"), Data.class); } } return data; }}和
Gson gson = new GsonBuilder() .registerTypeAdapter(Data.class,new DataDeserilizer()) .create();很明显,但有更优雅的解决方案吗?
总结以上是内存溢出为你收集整理的java – 使用GSON反序列化嵌套对象全部内容,希望文章能够帮你解决java – 使用GSON反序列化嵌套对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)