gpt4 book ai didi

java - 使用 Xstream 序列化枚举时如何指定别名

转载 作者:行者123 更新时间:2023-12-02 08:29:16 25 4
gpt4 key购买 nike

我正在序列化一个包含枚举作为字段的类,比方说:

private class DayOfWeekSet {
private final EnumSet<DayOfWeek> days;
}

public enum DayOfWeek implements Serializable {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY;
}

枚举的 Xstream 输出是:

 <days>
<day enum-type="com.company.model.DayOfWeek">MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY</day>
</days>

我想要这样的东西:

     <days>
<day>MONDAY</day>
<day>TUESDAY</day>
<day>WEDNESDAY</day>
<day>THURSDAY</day>
<day>FRIDAY</day>
<day>SATURDAY</day>
<day>SUNDAY</day>
</days>

我在 XStream 文档中找到了 @XStreamImplicit(itemFieldName="name") 注释,但它仅适用于集合。

是否可以使用注释来完成此操作,或者我是否需要创建转换器?

要获得我在创建以下转换器之前描述的结果:

public class XstreamDayOfTheWeekEnumConverter implements Converter {


@Override
@SuppressWarnings("rawtypes")
public boolean canConvert(Class type) {
return type.equals(DayOfWeekSet.class);
}

@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
DayOfWeekSet set = (DayOfWeekSet) source;
for (Iterator<DayOfWeek> iterator = set.getDays().iterator(); iterator.hasNext();) {
Enum<DayOfWeek> value = iterator.next();
writer.startNode("day");
writer.setValue(value.name());
writer.endNode();
}
}

@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
//Not implemented
return null;
}
}

如果我用 xstream 别名注释 (@XStreamAlias) 注释 Enum,有什么方法可以从它获取节点名称吗?

最佳答案

我认为 XStream 中不存在这种情况。您可能必须编写自己的转换器。您可以从 EnumSetConverter 的代码开始,应该不是很难...

关于java - 使用 Xstream 序列化枚举时如何指定别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3821555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com