簡體   English   中英

將帶有嵌套字段的 XML 反序列化為單個 JavaObject

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM