gpt4 book ai didi

java - 使用简单 XML (org.simpleframework.xml) 序列化第三方类

转载 作者:太空狗 更新时间:2023-10-29 22:40:32 27 4
gpt4 key购买 nike

我决定使用 Simple XML serialization并陷入了基本问题。我正在尝试将 java.util.UUID 类实例序列化为这个小类中的最终字段:

@Root
public class Identity {
@Attribute
private final UUID id;

public Identity(@Attribute UUID id) {
this.id = id;
}
}

Tutorial展示了如何通过像这样注册转换器来序列化第三方对象:

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 是否始终是流式传输第三方类(class)的推荐做法?
  • 在什么情况下我可以使用 Converter?
  • 是否有更好的简单 XML 教程/示例?

谢谢。

最佳答案

我又得自己回答了:-)

Simple XML 项目负责人 Niall Gallagher 的建议,来自支持列表:

"You could use either a Converter or a Transform. I would say for a UUID a Transform with a Matcher would be the easiest option."

所以,我使用 Transform<T>/Matcher并对此感到满意。这不会改变 Converter<T> 的事实对我不起作用:-)

关于java - 使用简单 XML (org.simpleframework.xml) 序列化第三方类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626208/

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