如何编写通过转换为中间对象进行写入和读取的XStream转换器?

时间:2012-02-15 01:57:17

标签: java xml xml-serialization xstream

我有一个班级MyClass。如果我在没有实现自定义转换器的情况下对其进行序列化,则它不是人类可读的。

我实施了MyClassDTO并在MyClassMyClassDTO之间进行转换。

使用XStream标准序列化时,

MyClassDTO是人类可读的。

我想编写XStream Converter序列化和反序列化MyClass Converter.marshal的实施应遵循:将MyClass对象转换为MyClassDTO,并为MyClassDTO调用默认序列化。

对于Converter.unmarshal:为MyClassDTO对象调用默认反序列化并将其转换为MyClass

如何以简单的方式实现此类行为?

我浏览了XStream Converter Tutorial,但没找到我需要的东西。

我需要填写以下存根:

class MatrixConverter<T> : Converter
    where T : new()
{
    public bool CanConvert(Type type)
    {
        return type == typeof(Matrix<T>);
    }

    public void ToXml(object value, Type expectedType, XStreamWriter writer, MarshallingContext context)
    {
        Matrix<T> matrix = value as Matrix<T>;
        if (matrix == null)
        {
            throw new ArgumentException();
        }
        // the code which I am asked about should follow here
    }

    public object FromXml(Type expectedType, XStreamReader reader, UnmarshallingContext context)
    {
        Matrix<T> matrix = null;

        // the code which I am asked about should follow here

    }
}

1 个答案:

答案 0 :(得分:1)

试试这个,假设

MatrixDTO m = new MatrixDTO( matrix );

从内部矩阵类型转换为DTO。

public void ToXml(object value, Type expectedType, 
    XStreamWriter writer, MarshallingContext context)
{
    context.convertAnother(new MatrixDTO( matrix ));
}

public Object FromXml(Type expectedType, 
    XStreamReader reader, UnmarshallingContext context)
{
    return context.convertAnother(context.currentObject(), MatrixDTO.class);
}

在解组的情况下,您可能需要手动将其插入context.currentObject()。我自己没试过。

希望它有所帮助。