我有一个类似于
的java类public class MyClass {
private final String str;
private Polygon polygon; // this polygon is a custom type of mine
}
我有一个xml文件,其中使用XStream写了一个MyClass
实例。
现在MyClass
已更改且多边形已替换为List<Polygon>
,并且该字段已重命名为polygons
,我正在尝试不破坏反序列化。我想更改polygon
字段的反序列化以基本上读取多边形,然后只创建一个新列表并将单个多边形添加到它。该列表将是新的字段值。
是否可以更改此字段的转换?或者我是否需要为整个班级MyClass
编写自定义转换器?
感谢, 杰夫
答案 0 :(得分:1)
因此,根据您的评论,我相信您需要一个自定义转换器。
以下是一个例子:
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class MyClassConverter implements Converter{
@Override
public boolean canConvert(Class clazz)
{
return clazz.equals(MyClass.class);
}
@Override
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context)
{
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context)
{
// Create MyClass Object
MyClass myClass = new MyClass();
// Traverse Tree
while (reader.hasMoreChildren())
{
reader.moveDown();
if ("polygon".equals(reader.getNodeName()))
{
Polygon polygon = (Polygon)context.convertAnother(myClass, Polygon.class);
myClass.addPolygon(polygon);
}
reader.moveUp();
}
// Return MyClass Object
return myClass;
}
}
如果你不知道,这里有参考指南:http://x-stream.github.io/converter-tutorial.html
现在,剩下要做的就是注册你的转换器,我假设你知道怎么做。无论如何,一个重要但值得注意的事情是'addPolygon'是我用来填充新列表对象的方法。