【发布时间】:2023-03-03 22:40:01
【问题描述】:
我正在尝试编写自己的Set 序列化程序,特别是HashSet。这是因为这样一个包含枚举元素的集合的默认输出如下所示:
modifier: {
amount: 1
criteriaSet: {
class: java.util.HashSet //<--- bothers me
items: [
NONE
ADD
MULTIPLY
]
}
}
所以我想我编写自己的序列化程序。这就是 write 方法的样子。
@Override
public void write(Json json, HashSet object, Class knownType) {
json.writeObjectStart();
for (Object o : object)
{
if (o instanceof Modifier.Criteria)
json.writeValue("name", ((Modifier.Criteria) o).name());
}
json.writeObjectEnd();
}
这可行,但需要我为字段命名,因此输出如下:
modifier: {
amount: 1
criteriaSet: {
name: NONE
name: ADD
name: MULTIPLY
}
}
这可行,但由于默认的Set 序列化程序不写入字段名称(名称:)我也想要。只写枚举名称就会产生错误json.writeValue(((Modifier.Criteria) o).name()); : java.lang.IllegalStateException: Name must be set.
我首先为EnumSet 尝试了这个,因为EnumSet 与Enum 的集合更有效,但我也遇到了问题。我正在寻找一种干净的解决方案来将 Enum 值存储到 Set 中。
【问题讨论】:
标签: java json serialization