Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java xStream问题-如何反序列化未声明的属性_Java_Xml_Xstream - Fatal编程技术网

Java xStream问题-如何反序列化未声明的属性

Java xStream问题-如何反序列化未声明的属性,java,xml,xstream,Java,Xml,Xstream,我正在使用xStream对XML进行反序列化 My xml包含一个标记: 和阶级 公共类元素{ @XStreamAsAttribute 公共字符串名称; @XStreamAsAttribute 公共字符串值; publicmap AnyAttr=新HashMap; } 字段名称和值反序列化正确 如何将未声明的字段标记、Text.Color反序列化到我的地图映射AnyAttr?您可以自己编写。这是唯一的方法,您无法通过简单的配置实现这一点。您必须创建自定义转换器类。像这个: public clas

我正在使用xStream对XML进行反序列化

My xml包含一个标记:

和阶级

公共类元素{ @XStreamAsAttribute 公共字符串名称; @XStreamAsAttribute 公共字符串值; publicmap AnyAttr=新HashMap; } 字段名称和值反序列化正确


如何将未声明的字段标记、Text.Color反序列化到我的地图映射AnyAttr?

您可以自己编写。这是唯一的方法,您无法通过简单的配置实现这一点。

您必须创建自定义转换器类。像这个:

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 = new XStream();
    xstream.aliasType("Element", Element.class);
    xstream.registerConverter(new ElementConverter());