java - 像 POJO 一样序列化 Java Set-like 对象
问题描述
我有一个实现java.util.Set
. 然而,对于 JSON 序列化,我想将此类的实例表示为 JSON 对象,其中集合的元素由自定义String
编码表示,这就是该类具有合成属性的原因elements
(即,没有真正的属性,值为总是即时计算)。
public class MySet implements Set<...> {
public String getElements() {
// Return String encoding of the set's elements.
}
public void setElements(String encoding) {
// Parse encoding and set elements of the set accordingly.
}
// A few more properties also accessible by getters/setters.
}
该类还有一些属性,getter/setter 也可以访问。它们也应该是 JSON 序列化的。总而言之,所有属性都应该序列化为 JSON 对象的键/值对。
预期的 JSON 序列化:
{
"elements": "...encoding...",
// other properties as key/value pairs
}
在这方面,类可以看作是一个POJO。事实上,这是我假设杰克逊要考虑的;即,杰克逊会忽略该类也是Set
. 然而,Jackson 似乎更喜欢这个类是一个 Set 并将其序列化;即,数组 JSON 结构。
是否可以仅使用注释来实现这种反序列化,@Json...
而无需实现自定义反序列化器?
解决方案
这可以使用@JsonFormat
注释来实现,基本上覆盖了 Jackson 序列化 a 的默认行为Set
:
@JsonFormat(shape = OBJECT)
public class MySet implements Set<...> {
// ...
}
这已成功测试,导致问题中描述的预期 JSON 对象结构。
推荐阅读
- ios - 核心数据启动错误 Domain=NSCocoaErrorDomain Code=134140 "(null)"
- java - 在 Java 中为 Actor System 设置默认的 ExecutionContext
- i2c - SPI和I2C读/写访问的区别
- javascript - 添加两个值时的JavaScript NaN
- laravel - 在 laravel 中发出 POST 请求
- alexa - 使用 node.js 的 Alexa 技能中的用户输入不调用意图
- react-native - React Native - 网络请求失败
- javascript - Javascript随机文本随机生成
- android - 检测到单点触控时模拟多点触控
- android - 使用 gson 的 JSON 到 Java 对象