0
我試圖自己編寫Set
序列化程序,HashSet
具體。這是因爲這樣的一組枚舉元素的默認輸出是這樣的:序列化集
modifier: {
amount: 1
criteriaSet: {
class: java.util.HashSet //<--- bothers me
items: [
NONE
ADD
MULTIPLY
]
}
}
所以我想我寫我自己的序列化程序。這就是寫入方法的樣子。
@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
。
偉大的工程。但現在我有問題反序列化它。有趣的是,我重寫的讀取方法甚至沒有被調用。任何想法爲什麼這是? – Madmenyo
我認爲這是因爲json看到一個arraylist,但是這個字段是一個HashSet。但不應該讀取方法先運行並返回正確的類型? '引發:java.lang.IllegalArgumentException:無法設置java.util.Set字段com.buckriderstudio.towercrawler.Creature.Modifier.criteriaSet爲java.util.ArrayList' – Madmenyo
哪個讀取方法?如果你有另一個問題,那麼可能會問另一個問題,包括相關的細節。 – Xoppa