У меня есть следующий классMapping JSONObject свойство XML с Moxy
@XmlRootElement(name = "Root")
class MyClass {
@XmlElement(name = "Entries")
JsonObject getProperty() { ... }
}
Я хотел бы иметь следующий вывод XML после сортировочных:
<Root>
<Entries>
<Entry>
<Name>Age</Name>
<Value>35</Value>
</Entry>
<Entry>
<Name>Email</Name>
<Value>[email protected]</Value>
</Entry>
</Entries>
</Root>
при условии, что JSON вернулся из getProperty()
является :
{ "Age": 35, "Email": "[email protected]" }
Я пытался создать вспомогательный класс XmlJsonEntry
@XmlAccessType(XmlAccessType.FIELD)
@XmlRootElement(name = "Entry")
class XmlJsonEntry {
@XmlElement
public String Name;
@XmlElement
public String Value;
}
и продлить XmlAdapter
следующим образом:
public static class JsonXmlAdapter extends XmlAdapter<XmlJsonEntry[], JsonObject>
{
@Override
public XmlJsonEntry[] marshal(JsonObject v) throws Exception
{
List<XmlJsonEntry> entries = new ArrayList<XmlJsonEntry>();
for (Entry<String,JsonElement> e : v.entrySet())
{
entries.add(new XmlJsonEntry(e.getKey(),e.getValue().toString()));
}
return entries.toArray(new XmlJsonEntry[entries.size()]);
}
@Override
public JsonObject unmarshal(XmlJsonEntry[] v) throws Exception
{ throw new Exception("Unmarshall not supported."); }
}
Но это бросает мне исключение во время кроссировки:
Попытка получить значение экземпляр переменной [name] типа [java.lang.String] из объекта [[Lmy.app. $ XmlJsonEntry;]. Указанный объект не является экземпляром класса или интерфейса, объявляющим базовое поле «
Как это получить? Может быть, есть более простой способ достичь этого?
Это сработало! Спасибо! – NumberFour