java - Gson序列化取决于字段值

标签 java android json serialization gson

我有一个类似于以下内容的 POJO:

public class MyGsonPojo {

    @Expose
    @SerializedName("value1")
    private String valueOne;

    @Expose
    @SerializedName("value2")
    private boolean valueTwo;

    @Expose
    @SerializedName("value3")
    private int valueThree;

    // Getters and other stuff here
}

问题是这个对象必须序列化成json body才能调用 到服务器。某些字段对于请求是可选的,如果我什至使用默认值和空值发送它,API 的响应会有所不同(不幸的是,更改 api 不是一个选项)。

所以基本上我需要将其中任何一个设置为默认值的字段从序列化中排除。例如,如果字段 valueOnenull,则生成的 json 应为:

{
    "value2" : true,
    "value3" : 2
}

知道如何轻松完成这项工作吗?我不想手动构建 json 主体。

任何帮助都会很棒。谢谢你的建议。

最佳答案

要遵循的步骤:

  • 将 JSON 字符串转换为 Map<String,Object>使用 Gson#fromJson()
  • 迭代 map 并从 map 中删除 null 的条目
  • 使用 Gson#toJson() 从最终 map 返回 JSON 字符串.

我已经在此处发布了相同上下文中的示例代码:

关于java - Gson序列化取决于字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24090651/

相关文章:

android - 我怎样才能在 Activity 中获得recevier实例(在AndroidManifest.xml中注册)

javascript - jQuery Fullcalendar 不在 IE 中呈现事件

javascript - 如何在多个 Controller 中使用相同的数据?

java - 如何在不浪费内存的情况下在 JBoss-Netty 中使用无限帧大小?

java - 找不到符号 - javax.swing.JTextField.getDocument().setDocumentFilter(javax.swing.text.DocumentFilter)

在 DB2 中执行更新查询的 Java 程序显示 SqlSyntaxErrorException

java - 从文件中获取 VideoUri 内容时出现 CursorIndexOutOfBoundsException

java - Android 位图改变色调

javascript - 序列化一个javascript数组

java - 如何使用递归方法打印 a 到 z