[英]how to specify an alias when serializing an enum using Xstream
我正在序列化一個包含枚舉字段的類,可以這樣說:
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”)注釋,但它僅適用於Collections。
是否可以通過注釋來完成它,或者我需要創建一個轉換器?
為了獲得我在創建以下轉換器之前描述的結果:
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;
}
}
如果我用Enum注釋了Enum,有什么方法可以從xstream別名注釋(@XStreamAlias)獲取節點名稱嗎?
我不認為這在XStream中存在。 您可能必須編寫自己的轉換器。 您可以從EnumSetConverter的代碼開始,這應該不會很困難...
EnumSetConverter不好。
如果可以使用其他集合,則可以正常工作:
public class DayOfWeekSet {
private List<DayOfWeek> days = new ArrayList<DayOfWeek>();
DayOfWeekSet() {
for (DayOfWeek dow: DayOfWeek.values()) {
days.add(dow);
}
}
@XStreamAlias("day")
public enum DayOfWeek implements Serializable {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY;
}
}
<DayOfWeekSet>
<days>
<day>MONDAY</day>
<day>TUESDAY</day>
<day>WEDNESDAY</day>
<day>THURSDAY</day>
<day>FRIDAY</day>
<day>SATURDAY</day>
<day>SUNDAY</day>
</days>
</DayOfWeekSet>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.