你如何序列化你的枚舉?
如果你使用它這個樣子,這應該沒有問題,但會返回一些不同的XML:
例子:
@Root
public class Example
{
@Element
private TestStatus status = TestStatus.AVAILABLE;
// ...
}
測試:
final File f = new File("test.xml");
Serializer ser = new Persister();
ser.write(new Example(), f);
Example m = ser.read(Example.class, f);
XML:
<example>
<status>AVAILABLE</status>
</example>
您可以使用annotationarguments重命名xml標籤,但該值不會更改。
另一個(可能的)溶液是用一個定製的轉換器:
枚舉的
註解:
@Root()
@Convert(TestStatusConverter.class)
public enum TestStatus
{
// ...
}
轉換器(實施例)
public class TestStatusConverter implements Converter<TestStatus>
{
@Override
public TestStatus read(InputNode node) throws Exception
{
final String value = node.getNext("status").getValue();
// Decide what enum it is by its value
for(TestStatus ts : TestStatus.values())
{
if(ts.getStatus().equalsIgnoreCase(value))
return ts;
}
throw new IllegalArgumentException("No enum available for " + value);
}
@Override
public void write(OutputNode node, TestStatus value) throws Exception
{
// You can customize your xml here (example structure like your xml)
OutputNode child = node.getChild("status");
child.setValue(value.getStatus());
}
}
測試(ENUM):
final File f = new File("test.xml");
// Note the new Strategy
Serializer ser = new Persister(new AnnotationStrategy());
ser.write(TestStatus.AVAILABLE, f);
TestStatus ts = ser.read(TestStatus.class, f);
System.out.println(ts);
測試(類枚舉):
和上述一樣但AnnotationStrategy
你可以給XML作爲代碼 - 你不必添加和號字符 – 2011-02-15 15:18:18
@Peter,肯定會那樣做,Ta。 – Abidi 2011-02-15 15:22:18