使用Gson的自定义JSON反序列化器

使用Gson的自定义JSON反序列化器,第1张

使用Gson的自定义JSON反序列化器

您必须编写一个 自定义反序列化器 。我会做这样的事情:

首先,您需要包括一个新的类,而不是已有的两个类:

public class Response {    public VkAudioAlbumsResponse response;}

然后,您需要一个自定义解串器,类似于以下内容:

private class VkAudioAlbumsResponseDeserializer     implements JsonDeserializer<VkAudioAlbumsResponse> {  @Override  public VkAudioAlbumsResponse deserialize(JsonElement json, Type type,        JsonDeserializationContext context) throws JsonParseException {    JsonArray jArray = (JsonArray) json;    int firstInteger = jArray.get(0); //ignore the 1st int    VkAudioAlbumsResponse vkAudioAlbumsResponse = new VkAudioAlbumsResponse();    for (int i=1; i<jArray.size(); i++) {      JsonObject jObject = (JsonObject) jArray.get(i);      //assuming you have the suitable constructor...      VkAudioAlbum album = new VkAudioAlbum(jObject.get("owner_id").getAsInt(), jObject.get("album_id").getAsInt(), jObject.get("title").getAsString());      vkAudioAlbumsResponse.getResponse().add(album);    }    return vkAudioAlbumsResponse;  }  }

然后,您必须像这样反序列化JSON:

GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.registerTypeAdapter(VkAudioAlbumsResponse.class, new VkAudioAlbumsResponseDeserializer());Gson gson = gsonBuilder.create();Response response = gson.fromJson(jsonString, Response.class);

使用这种方法,当Gson尝试将JSON反序列化为

Response
类时,它将发现该类中存在一个
response
与JSON响应中的名称匹配的属性,因此它将继续进行解析

然后,它意识到此属性是类型的

VkAudioAlbumsResponse
,因此它将使用您创建的自定义反序列化器对其进行解析,该反序列化器将处理JSON响应的其余部分并返回对象
VkAudioAlbumsResponse

注意:反序列化器中的代码非常简单,因此我想您将毫无疑问地了解它…有关更多信息,请参见 Gson API
Javadoc



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4930320.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-13
下一篇2022-11-13

发表评论

登录后才能评论

评论列表(0条)

    保存