复杂对象反序列化 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
我正在尝试将 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