复杂对象反序列化 java

Complex object deserialization java

我正在尝试将 XML 字符串反序列化为一个包含列表的对象。反序列化部分成功。这些是我的 java 类.

public class Vector {
    public double x;
    public double y;
    public double z;
}

public class TP{
    public Date Time;
    public double thrust;
    public double isp;
    public double duration = .5;
    public Vector direction;
}

public class SOP{
    public Date Time;
    public Vector Position;
    public Vector Velocity;
    public Vector Acceleration;
    public double mass;
}

@XmlRootElement(name="OPS")
@XmlAccessorType(XmlAccessType.FIELD)
public class OPS{

    public OPS() {
        TPS= new ArrayList<TP>();
    }
    
    public SOP initialState;
    public List<TP> TPS;
    public Date Time;
    
}

这是XML

<?xml version="1.0" encoding="utf-8"?>
<OPS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <initialState>
    <Time>2021-03-18T09:55:07.1259143-04:00</Time>
    <Position>
      <x>0</x>
      <y>0</y>
      <z>0</z>
    </Position>
    <Velocity>
      <x>0</x>
      <y>0</y>
      <z>0</z>
    </Velocity>
    <Acceleration>
      <x>0</x>
      <y>0</y>
      <z>0</z>
    </Acceleration>
    <mass>0</mass>
  </initialState>
  <TPS>
    <TP>
      <Time>2021-03-18T09:55:07.1119203-04:00</Time>
      <thrust>1</thrust>
      <isp>1</isp>
      <duration>0.5</duration>
      <direction>
        <x>0</x>
        <y>0</y>
        <z>0</z>
      </direction>
    </TP>
    <TP>
      <Time>2021-03-18T09:55:07.1259143-04:00</Time>
      <thrust>1</thrust>
      <isp>1</isp>
      <duration>0.5</duration>
      <direction>
        <x>0</x>
        <y>0</y>
        <z>0</z>
      </direction>
    </TP>
    <TP>
      <Time>2021-03-18T09:55:07.1259143-04:00</Time>
      <thrust>1</thrust>
      <isp>1</isp>
      <duration>0.5</duration>
      <direction>
        <x>0</x>
        <y>0</y>
        <z>0</z>
      </direction>
    </TP>
  </TPS>
  <Time>2021-03-18T09:55:07.1259143-04:00</Time>
</OPS

反序列化后,OPS对象的Time和initialState属性上会有数据,但TPS列表为空。我错过了什么?非常感谢您的帮助。

在 TPS 属性 上添加 @XmlElementWrapper@XmlElement 注释:

    @XmlRootElement(name="OPS")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class OPS {

        public OPS() {
            TPS= new ArrayList<TP>();
        }

        public SOP initialState;
        @XmlElementWrapper(name="TPS")
        @XmlElement(name="TP")
        public List<TP> TPS;
        public Date Time;

更多可以在这里找到详细信息:JAXB & Collection Properties