【发布时间】:2021-11-27 14:10:12
【问题描述】:
如果我有 POJO
class Night {
int stars = 10;
// getter and setter for stars
}
我用 Jackson 序列化它,它将序列化 stars 字段。但是因为字段是在创建对象时设置的,所以不需要对字段进行序列化,除非值与10不同。
我最初认为@JsonInclude(value = Include.NON_DEFAULT) 会这样做,但后来意识到“默认”是关于类型的,所以 0 表示 int,而不是关于 POJO。
我不想序列化很多在反序列化时不需要设置的值,因为无论如何都会发生这种情况。我只想序列化改变的值。除了创建自定义序列化程序之外,还有其他方法吗?
我正在使用 Jackson 2.13,我认为它是最新的。
【问题讨论】:
-
我对您对您要达到的目标的解释感到有些困惑,并且想知道您是否在您的意思是“反序列化”的地方使用了“序列化”这个词。您能否提供清晰的场景来准确显示您正在尝试做什么?
-
反序列化所有内容。您的反序列化数据不应是“反序列化值”和“仅在代码中已知的值”的组合;它应该是所有领域。您将无法区分默认值和缺失值(尽管您可以序列化非原始字段的空值以指示缺失)。此外,如果将来您的默认值发生更改,您的反序列化数据将不完整/不正确。我想不出有任何理由有条件地跳过反序列化;这样做会导致后悔。最后,我认为您正确使用了“序列化”和“反序列化”。
-
@Paul “如果您的默认值在未来发生变化,您的反序列化数据将不完整/不正确。”这是一个很好的观点,我也会考虑的。谢谢