首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用简单XML序列化第三方类(org.simpleframework.xml)

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

Stack Overflow用户
提问于 2010-09-02 18:29:24
回答 3查看 7.7K关注 0票数 17

我决定使用Simple XML serialization,但遇到了一些基本的问题。我正在尝试将java.util.UUID类实例序列化为这个小类中的final字段:

@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();
    }
}

问题:

对于流式传输第三方类,Converter?

  • Are是自定义匹配器始终推荐的做法?

  • ,在这种情况下,我可以使用Converter?

  • Are。对于简单的

  • ,还有更好的教程/示例吗?

谢谢。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3626208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档