Java 如何通过XStream在类内使用HashMap读取xml

Java 如何通过XStream在类内使用HashMap读取xml,java,xml,xstream,Java,Xml,Xstream,这里是我的类字段 @XStreamAlias("OrgEntity") public class OrgEntity implements Serializable { private static final long serialVersionUID = 2L; private static final int MAX_SHARE_PERCENTAGE = 100; private static final byte MIN_ORG_NAME_LENGTH

这里是我的类字段

 @XStreamAlias("OrgEntity")
    public class OrgEntity implements Serializable {

    private static final long serialVersionUID = 2L;
    private static final int MAX_SHARE_PERCENTAGE = 100;
    private static final byte MIN_ORG_NAME_LENGTH = 2;
    public static Map<String, OrgEntity> allOrgMap;
    @XStreamAlias("entityName")
    @XStreamAsAttribute
    private String entityName;
    private OrgType type;
    private float sharesPortionHeldBy;
    private double authorisedCapital;
    private String parentCompanyName;
    private Human ceo;

    private Map<ShareHolder, Float> shareHoldersMap;
.... 
}

在XStream 1.4.5及更高版本中,您可以使用

NamedMapConverter

因此,在您的情况下,您可以尝试以下方法:

XStream xstream = new XStream();
NamedMapConverter namedMapConverter = new NamedMapConverter(xstream.getMapper(), "entry", "key", ShareHolder.class, "value", Float.class);
xstream.registerConverter(namedMapConverter);
public static void main(String[] args) {
        OrgEntity o = DataForRunners.createDataForBasicFile15OrgsWithShareHoldingsUpdateForXML().get(0);
        String xmlOrgObj = "src/main/java/com/.... ";
        new XStreamDecorator<OrgEntity>(o, xmlOrgObj);
        XStream xstream = new XStream(new DomDriver());
        xstream.alias("OrgEntity", OrgEntity.class);
        xstream.alias("entityName", OrgEntity.class);
        xstream.alias("type", OrgType.class);
        xstream.alias("ceo", Human.class);
        xstream.addImplicitCollection(HashMap.class, "shareHoldersMap");
        InputStream in = null;
        try {

            in = new FileInputStream(xmlOrgObj);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        OrgEntity var =(OrgEntity) xstream.fromXML(in);
        System.out.println(var);

    }
XStream xstream = new XStream();
NamedMapConverter namedMapConverter = new NamedMapConverter(xstream.getMapper(), "entry", "key", ShareHolder.class, "value", Float.class);
xstream.registerConverter(namedMapConverter);