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);