【问题标题】:One @SerializedName allowing for multiple datatypes一个 @SerializedName 允许多种数据类型
【发布时间】:2020-03-19 17:10:07
【问题描述】:

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

这是 @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,只序列化不为空的值?
  • 我能否在 java 中构建某种可选的数据类型对象,该对象是基于具有值的数据类型设置的?

这个对象是一个更大的对象的一部分,并且 subitems 对象对它有相当多的深度,就像一个注释一样。我希望这是某个问题的重复,但到目前为止我一直无法找到它。

编辑:

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

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

第三次编辑:让我知道我是否应该删除这些多余的部分。我正在尝试实施这种方法 - inner serialization - 这个答案虽然很老,但现在很难做。

【问题讨论】:

  • 你试过private Object value;吗?
  • 哇是的,这很有效,这看起来像是我看过的一些基本的 Java 编程概念。我可以删除这个问题,或者如果您想将此作为答案发布,我会清理我的问题并将您的问题标记为正确。谢谢!
  • 如果您认为看到此问题的答案对其他人有帮助,您可以自行回答,否则直接删除。如果您自行回答并且其他人觉得它有用,您可能会获得 Self-Learner 徽章。

标签: java android serialization gson


【解决方案1】:

感谢安德烈亚斯的回答。

使用 Object,我能够避免预先定义变量。

@SerializedName("value")
private Object value;

这让我可以将 StringIntegerboolean 都传递给同一个值字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多