Gson Advanced — 简单自定义序列化 (Part 1)

原文链接:[Gson Advanced — Custom Serialization for Simplification (Part 1)](https://futurestud.io/tutorials/gson-advanced-custom-serialization-part-1
)
原文出自:Norman Peitek
译者:無名無

本文将实现一个自定义的 Gson serialization 过程,有些情况我们可能会考虑到自定义,例如:和 server 通信时,有时候不需要传递一个完成 JSON 信息,只需要关键信息即可,接下来我们一步一步分析。

自定义序列化

有个这样的场景:App 从 服务器获取一个列表,用户可以订阅列表中的每一项,但是要将订阅的某一条发送给服务器同步。
我们一步一步实现:

Models

public class UserSimple {  
    private String name;
    private String email;
    private boolean isDeveloper;
    private int age;
}

public class Merchant {  
    private int Id;
    private String name;

    // possibly more properties
}

用于解析完整列表的 Model:

public class UserSubscription {  
    String name;
    String email;
    int age;
    boolean isDeveloper;

    // new!
    List<Merchant> merchantList;
}

问题

先看输出:

{
  "age": 26,
  "email": "norman@fs.io",
  "isDeveloper": true,
  "merchantList": [
    {
      "Id": 23,
      "name": "Future Studio"
    },
    {
      "Id": 42,
      "name": "Coffee Shop"
    }
  ],
  "name": "Norman"
}

这是一个非常标准 JSON 的输出,但是在实际中,不可能是这么小的数据量,而且 Merchant 结构可能非常复杂,这就会造成 JSON 数据非常大,从而导致解析或传递耗时。

使用 @Expose 简化

我们第一个想到的方法是减少 Merchant 中不必要字段的序列化,使用之前学过的 @Expose 来简化 JSON,我们来调整下 Merchant:

public class Merchant {  
    private int Id;

    @Expose(serialize = false)
    private String name;

    // possibly more properties
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值