2015-01-27 4 views
0

xStream을 사용하여 XML을 deserialize합니다.xStream 문제 - 선언되지 않은 속성을 deserialize하는 방법

내 XML은 태그가 포함되어 내가 선언되지 않은 필드를 역 직렬화 수있는 방법

<Element Name="Test" Value="TestValue" Tag="tag" Text.Color="Red"/> 

및 클래스

public class Element { 

    @XStreamAsAttribute 
    public String Name; 

    @XStreamAsAttribute 
    public String Value; 

    public Map<String, String> AnyAttr = new HashMap<String, String>(); 
} 
필드 이름 및 값이 올바른지 역 직렬화

,

을 (태그, Text.Color) 내지도 (AnyAttr지도)에?

답변

0

자신 만의 Converter을 작성할 수 있습니다. 이것이 유일한 방법입니다. 간단한 구성으로는이를 달성 할 수 없습니다.

0

사용자 지정 Converter 클래스를 만들어야합니다. 하나 같이 : 다음

public class ElementConverter implements Converter 
{ 
    public boolean canConvert(Class clazz) { 
     return Element.class == clazz; 
    } 

    public void marshal(Object object, HierarchicalStreamWriter hsw, MarshallingContext mc) { 
     Element e = (Element) object; 
     hsw.addAttribute("Name", e.Name); 
     hsw.addAttribute("Value", e.Value); 
     for (Map.Entry<String, String> entry : e.AnyAttr.entrySet()) 
     { 
      hsw.addAttribute(entry.getKey(), entry.getValue()); 
     } 
    } 

    public Object unmarshal(HierarchicalStreamReader hsr, UnmarshallingContext uc) { 
     Element e = new Element(); 
     String key; 
     int count = hsr.getAttributeCount(); 
     for (int i = 0; i < count; i++) 
     { 
      key = hsr.getAttributeName(i); 
      if (key.equals("Name")) e.Name = hsr.getAttribute(i); 
      else 
      if (key.equals("Value")) e.Value = hsr.getAttribute(i); 
      else e.AnyAttr.put(key, hsr.getAttribute(i)); 
     } 
     return e; 
    } 
} 

당신은 당신이 그것을 사용하기 전에 XStream을에 변환기를 등록해야 :

XStream xstream = new XStream(); 
    xstream.aliasType("Element", Element.class); 
    xstream.registerConverter(new ElementConverter()); 
관련 문제