我使用xStream反序列化XML。
我的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>();
}
字段名称和值反序列化正确,
如何将未声明的字段(Tag,Text.Color)反序列化为我的地图(Map AnyAttr)?
答案 0 :(得分:0)
您可以自己编写Converter
。这是唯一的方法,您可以通过简单的配置实现这一目标。
答案 1 :(得分: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());