我的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主体中,以便调用服务器。有些字段对于请求是可选的,如果我甚至用默认值和空值发送它,应用编程接口会做出不同的响应(不幸的是,更改应用编程接口不是一个选项)。
所以基本上我需要从序列化中排除字段,如果其中任何一个设置为默认值。例如,如果字段valueOne
为null
,则生成的json应该是:
{
"value2" : true,
"value3" : 2
}
知道如何让这成为一种无痛的努力吗?我不想手动构建json主体。
任何帮助都会很好。谢谢你的建议。
选项1)使用TypeAdapter,请参见此处接受的答案:
选项2)如果可以使用Jackson而不是gson,那么可以在getter上而不是字段上进行注释/序列化,并在getter中输入返回“默认值”所需内容的逻辑。
//won't get serialized because it's private
private String valueOne;
...
@JsonSerialize
String getValueOne(){
if (valueOne == null) return "true"
else...
}
您还可以在类的顶部使用一个@JsonInclude(Include.NON_NULL)
或@JsonInclude(Include.NON_EMPTY)
注释来防止任何NULL或空字段被序列化。
是否有方法序列化类的瞬态字段?文档中提到默认情况下不支持它,但是否有办法打开它? 非常感谢
主要内容:使用excludeFieldsWithModifiers()方法,使用@Expose注解默认情况下,GSON排除序列化/反序列化过程中的瞬态和静态字段。 我们来看看下面的例子。 示例 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 使用excludeFieldsWithModifiers()方法 GsonBuilder使用序列化/反序列化过程中的方法提供对使用特定修饰符排除字段的控制。 看下面的例子。 示例 创建一个名为的Java
首先,我想说这是一个大学项目。 我有三节课<代码>订单抽象类和从订单继承的和类。 我使用Gson序列化/反序列化子类,但我遇到了一点问题。订单类有一个字段,gson使用该字段来确定订单类型,DineIn或Delivery。 序列化工作得很好。问题是,每当我尝试反序列化时,类型字段值都不会读取,并且总是设置为null,即使它存在于JSON文件中。当有很多字段时,就会发生这种情况,因为当我尝试在较小的
我使用Gson与改造。我的服务器接受空值,所以在我给的gson构建器 这样就不会忽略空值。但是在一些s中,我有一个特殊的情况,其中一些字段应该存在,即使是它的null,而其他一些字段如果是null也不应该序列化。 例如,如果我有一个请求类,比如 如果我有一个请求,其中和,应该将其序列化如下: 这意味着,如果type为null,它应该忽略该字段,但是如果id为null,它应该在请求中显示为null。
这里有人知道如何使用TypeAdapterFactory基于“type”字段进行反序列化而不需要将整个json流读取到JsonElement对象树中吗?
问题内容: 我找不到在Gson进行序列化期间添加自定义字段的简单方法,我希望其他人可以提供帮助。 这是一个示例类来展示我的问题: 当我序列化类AI时,想返回以下内容: 其中url_to_user未存储在我的类A的实例中,但可以与数据一起在类A的实例中生成。 有没有简单的方法可以做到这一点?我宁愿避免只添加一个字段就编写整个序列化程序。 问题答案: 用得到,用它可以动态交互。