我有一个班级MyClass
。如果我在没有实现自定义转换器的情况下对其进行序列化,则它不是人类可读的。
我实施了MyClassDTO
并在MyClass
和MyClassDTO
之间进行转换。
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
}
}
答案 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()。我自己没试过。
希望它有所帮助。