使用 Simple XML 序列化第三方类 (org.simpleframework.xml)
2022-09-03 02:11:37
我决定使用简单的XML序列化,并陷入了基本问题。我正在尝试将类实例序列化为这个小类中的最终字段:java.util.UUID
@Root
public class Identity {
@Attribute
private final UUID id;
public Identity(@Attribute UUID id) {
this.id = id;
}
}
教程演示如何通过注册转换器来序列化第三方对象,如下所示:
Registry registry = new Registry();
registry.bind(UUID.class, UUIDConverter.class);
Strategy strategy = new RegistryStrategy(registry);
Serializer serializer = new Persister(strategy);
serializer.write( object, stream );
UUID的适当转换器非常简单:
public class UUIDConverter implements Converter<UUID> {
@Override
public UUID read(InputNode node) throws Exception {
return new UUID.fromString(node.getValue());
}
@Override
public void write(OutputNode node, UUID value) throws Exception {
node.setValue(value.toString());
}
}
但是这个简单的代码对我不起作用,在序列化过程中,带有UUID字段的对象被抛出异常 不支持java.util.UUID类的转换。
我已经尝试了与自定义(不在教程中)类似的东西,这对我有用:Matcher
Serializer serializer = new Persister(new MyMatcher());
serializer.write( object, stream );
和类看起来像这样:Matcher
public static class MyMatcher implements Matcher {
@Override
@SuppressWarnings("unchecked")
public Transform match(Class type) throws Exception {
if (type.equals(UUID.class))
return new UUIDTransform();
return null;
}
}
public class UUIDTransform implements Transform<UUID> {
@Override
public UUID read(String value) throws Exception {
return UUID.fromString(value);
}
@Override
public String write(UUID value) throws Exception {
return value.toString();
}
}
问题:
- 自定义 Matcher 是否始终是流式传输第三方课程的推荐做法?
- 在哪种情况下,我可以使用转换器?
- 有没有更好的简单XML教程/示例?
谢谢。