2011-01-19 45 views
1

我有一個Java類,看起來像XStream的反序列化時,變量的類型改變

public class MyClass { 
    private final String str; 
    private Polygon polygon; // this polygon is a custom type of mine 
} 

我有了寫它使用XStream把的MyClass實例的XML文件。

現在MyClass已經改變,多邊形已被替換爲List<Polygon>和該字段已被重命名爲polygons,我試圖不打破反序列化。我想要更改polygon字段的反序列化以基本讀取多邊形,然後創建一個新列表並將單個多邊形添加到該列表中。該列表將成爲新的字段值。

是否可以改變這個字段的轉換?或者我需要爲全班MyClass寫一個自定義轉換器?

感謝, 傑夫

回答

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'是我用來填充你的新列表對象的方法。

+0

不幸的是,xml文件存儲在客戶端計算機上,所以我無法訪問所有文件,也無法要求他們手動編輯它們。 – 2011-02-03 19:56:33

相關問題