Сериализация / десериализация Java HashMap в SimpleXML
В моем классе Java у меня есть атрибут:
private HashMap<String, Integer> keywordFrequencies;
И мне нужно сериализовать / десериализовать объекты соответствующего класса.
Может ли SimpleXML представлять этот тип объекта Java? А как может выглядеть XML?
Мой XML такой:
<keywordFrequencies>
<keyword key="Osborne">1</keyword>
<keyword key="budget">3</keyword>
</keywordFrequencies>
Код для десериализации на данный момент является универсальным методом:
public static void printHashMap(HashMap<String, Integer> hm) {
Set s = hm.entrySet();
Iterator i = s.iterator();
int j = 0;
// Print the index.
while(i.hasNext()) {
Map.Entry m = (Map.Entry) i.next();
System.out.println("No=" + (j + 1) + ", Key=" + m.getKey() + ", Freq=" + m.getValue());
j++;
}
}
Атрибут в классе Java:
@ElementMap(entry="keywordFrequencies", key="key", attribute=true, inline=true)
private HashMap<String, Integer> keywordFrequencies;
Где я вызываю метод для печати hashmap как:
HashMap_Utils.printHashMap(requestOMDM.getKeywordFrequencies());
1 ответ
Решение
Вам нужно добавить
@ElementMap(entry="keywordFrequencies", key="key", attribute=true, inline=true)
private Map<String, Integer> keywordFrequencies;
http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php
/edit, у меня сейчас ограниченное соединение, но, насколько я помню, вы можете иметь...
У вас будет ваш бин, который будет использоваться для сериализации в и из XML
@Root(name="root")
public class Example {
@Element
private String someProperty;
@ElementMap(entry="keywordFrequencies", key="key", attribute=true, inline=true)
private Map<String, Integer> keywordFrequencies;
// getters and setters ommited
}
Serializer serializer = new Persister();
Example ex = new Example();
// set properties of ex here...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.write(ex, baos); // you can put here a FileOutputStream("fileToWrite.xml") too
String content = new String(baos.getBytes(), "UTF-8");
System.out.println(content);
// and then to deserialize
Example retrievedFromXml = serializer.read(Example.class, content);
Это помогает?