gpt4 book ai didi

java - Sourceforge SimpleXML 枚举序列化

转载 作者:行者123 更新时间:2023-12-01 05:44:31 24 4
gpt4 key购买 nike

SimpleXML可以很好地序列化 Java Enum,但是当涉及到反序列化时,它返回 null 而不是从生成的 XML 创建 Enum。根本不支持 Enum 序列化是我做错了吗?

序列化返回:

<TestStatus>
<status>Functional</status>
</TestStatus>

测试枚举:
   @Root
public enum TestStatus {

AVAILABLE("Functional"),
NOT_AVAILABLE("Dysfunctional");

@Element
private String status;

private Status(String status) {
this.status = status;
}

public String getStatus() {
return status;
}
}

最佳答案

你如何序列化你的枚举?

如果您像这样使用它,它应该可以正常工作,但会返回一些不同的 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-tags,但该值不会更改。

另一个(可能的)解决方案是使用自定义转换器:

枚举的注释:
@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());
}
}

测试(枚举):
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

关于java - Sourceforge SimpleXML 枚举序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5005375/

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