栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

GSON:自定义对象反序列化

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GSON:自定义对象反序列化

我采用了答案,以介绍聊天中设计的完整解决方案并适合更改后的JSON字符串。该代码假定字符串json完全包含问题中的(更新的)JSON。要求是填充以下类(省略setter和toString):

class Object1{    private String attribute1;    private String attribute40;    private int userId;    private String  nameList;}

GSON支持(与大多数其他REST库一样)三种模式:

  • GSON_DOM
    通过读取整个JSON

    JsonParser.parse()
    并在内存中构建DOM树(对象模型访问)。因此,此解决方案适用于小型JSON文件。

  • GSON_STREAM通过
    读取JSON的大块

    JsonReader
    。代码更加复杂,但是它适用于大型JSON文件。从Android 3.0
    Honeycomb开始,GSON的流解析器包含为
    android.util.JsonReader

  • GSON_BIND
    通过反射将数据直接绑定到类,从而极大地减少了代码。GSON允许使用混合模式,这意味着应结合该答案显示的GSON_DOM和GSON_BIND或GSON_STREAM和GSON_BIND。

通过GSON_DOM和GSON_BIND填充类Object1,实现如下所示:

private static void deserializeViaObjectAccess(final String json){    Gson gson = new Gson();    // Read the whole JSON into meomory via GSON_DOM    JsonParser parser = new JsonParser();    JsonObject object1 = parser.parse(json).getAsJsonObject().getAsJsonObject("object1");    // map the Object1 class via GSON_BIND    // (bind common attributes which exist in JSON and as properties in the class)    // mapper acts as factory    Object1 result = gson.fromJson(object1, Object1.class);    // manually read the attribute from the user object    int userId = object1.getAsJsonObject("user").getAsJsonPrimitive("id").getAsInt();    result.setUserId(userId);    // manually read the attributes from the example object    String names = "";    JsonArray list = object1.getAsJsonObject("example").getAsJsonArray("list");    for (int i = 0; i < list.size(); ++i)    {        JsonObject entry = list.get(i).getAsJsonObject();        String name = entry.getAsJsonPrimitive("name").getAsString();        names = i == 0 ? name : names + "; " + name;    }    result.setNameList(names);    // Output the result    log.debug(result.toString());}

通过GSON_STREAM和GSON_BIND填充类Object1,实现如下:

目前,这仅在通过GSON_BIND或GSON_STREAM完全加载节点时才可行。此示例需要拆分节点本身。这仅在即将发布的2.2版中可行。当GSON
2.2可用时,我将交出代码。*



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号