一个@SerializedName允许多种数据类型

时间:2019-11-24 03:30:55

标签: java android serialization gson

我正在将对象上传到服务器,并且“值”字段接受字符串,整数和布尔值。

这里是@SeralizedName应用明显失败的模型。

public class InspectionFormItems {

@SerializedName("id")
private Integer id;

@SerializedName("type")
private String type;

@SerializedName("value")
private String stringValue;

@SerializedName("value")
private boolean boolValue;

@SerializedName("value")
private int intValue;

@SerializedName("name")
private String name;

@SerializedName("children")
ArrayList<ArrayList<InspectionFormItems>> subitems;
}

我发现的大多数stackoverflow结果都用于序列化整个对象或反序列化。我的一些想法是..

  • 是否可以从三个值字段中删除@SerializedName并仅序列化不为null的值?
  • 我可以在Java中构建某种可选的数据类型对象,该对象是根据具有值的数据类型设置的吗?

该对象是较大对象的一部分,而子项对象也具有一定的深度,就像注释一样。我希望这是某些问题的重复内容,但到目前为止我还是找不到。

编辑:

这是我发现的最接近的问题,尽管我宁愿不像此人那样自定义序列化整个对象,因为此传出的json中可能有40-100个这些对象 gson-same-field-name-different-types-serialize

我还发现我无法动态设置@SerializedValue属性 is-it-possible-to-pass-method-parameter-to-annotation-on-a-method?

第3次修改:让我知道是否应该删除这些多余的内容。我正在尝试实现此方法-inner serialization-尽管这个答案很旧,现在很难进行工作。

1 个答案:

答案 0 :(得分:0)

感谢Andreas的回答。

使用 Object ,我可以避免预定义变量。

@SerializedName("value")
private Object value;

这使我可以将 String Integer boolean 传递到同一值字段。