[英]Deserializing XML with nested fields to a single JavaObject
我的目標是將 XML 轉換為 JavaObject 並讓 JavaObject 能夠處理一個或多個“任務”。
我還希望能夠將 JavaObject 轉換為 JSON。
如何才能做到這一點? 當前為 state,如果只存在一個任務,我可以轉換,但會導致錯誤。
我有一個遵循以下結構的 XML 文件:
<Plan>
<ID></ID>
<Comment></Comment>
<CreateTime></CreateTime>
<Task>...</Task>
<Task>...</Task>
<Task>...</Task>
</Plan>
每個 Task 元素的結構如下:
<Task>
<Type></Type>
<Time></Time>
<Target>
<Code></Code>
<TargetId></TargetId>
<Content>
<Stuff1></Stuff1>
<Stuff2></Stuff2>
<Stuff3></Stuff3>
</Content>
</Target>
</Task>
當只涉及一個任務時,我能夠反序列化 XML。 再給我錯誤。
我的課程(簡化)如下:
@Root(name = "Plan")
public class Plan{
@Element(name = "ID")
private String id;
@Element(name = "Comment")
private String comment;
@Element(name = "CreateTime")
private String createTime;
@Element(name = "Task")
private Task task;
}
@Root(name = "Task")
public class Task{
@Element(name = "Type")
private String type;
@Element(name = "Time")
private String time;
@Element(name = "Target")
private Target target;
}
@Root(name = "Target")
public class Target{
@Element(name = "Code")
private String code;
@Element(name = "TargetId")
private String targetId;
@Element(name = "Content")
private Content content;
}
@Root(name = "Content")
public class Content{
@Element(name = "Stuff1")
private String stuff1;
@Element(name = "Stuff2")
private String stuff2;
@Element(name = "Stuff3")
private String stuff3;
}
在架構文件中,我設置了這個但似乎不起作用:
<xs:element name="Task" type="Task" minOccurs="1" maxOccurs="unbounded">
當前為 state,如果只存在一個任務,我可以轉換,但會導致錯誤。
發生這種情況是因為您的元素注釋將任務標記解釋為一個屬性,因此如果有多個標記,則會引發錯誤。 為避免此行為,您可以使用可應用於任務列表的JacksonXmlElementWrapper
注釋:
public class Plan {
@JacksonXmlProperty(localName = "Task")
@JacksonXmlElementWrapper(useWrapping = false)
List<Task> tasks;
}
public class Task {}
以上是一個入門的基本示例,您可以使用它來定義更復雜的 xml。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.