Java 使用XStream从XML获取对象

Java 使用XStream从XML获取对象,java,xml,xstream,Java,Xml,Xstream,我已经试着做了一段时间了。 在第一种方法中,我阅读了下面的XML,这与这个类非常吻合 <?xml version="1.0" encoding="UTF-8"?> <SessionInfo> <SID>984d8edferer73201ac3f</SID> <Challenge>65892d4a</Challenge> <BlockTime>0</B

我已经试着做了一段时间了。 在第一种方法中,我阅读了下面的XML,这与这个类非常吻合

<?xml version="1.0" encoding="UTF-8"?>
<SessionInfo>
   <SID>984d8edferer73201ac3f</SID>
   <Challenge>65892d4a</Challenge>
   <BlockTime>0</BlockTime>
   <Rights>
   </Rights>
</SessionInfo>
现在我尝试阅读这个XML

<?xml version="1.0" encoding="UTF-8"?>
<SessionInfo>
   <SID>eresrer93j33434</SID>
   <Challenge>45485ser</Challenge>
   <BlockTime>0</BlockTime>
   <Rights>
      <Name>Dial</Name>
      <Access>2</Access>
      <Name>App</Name>
      <Access>2</Access>
      <Name>HomeAuto</Name>
      <Access>2</Access>
      <Name>BoxAdmin</Name>
      <Access>2</Access>
      <Name>Phone</Name>
      <Access>2</Access>
      <Name>NAS</Name>
      <Access>2</Access>
   </Rights>
</SessionInfo>

然后我得到了我的SessionInfo课程,有权利但有:

SessionInfo(sid=518e58erc70e226, challenge=rersrerer, blockTime=0, rights=Rights(names=[], accesses=[Dial, 2, App, 2, HomeAuto, 2, BoxAdmin, 2, Phone, 2, NAS, 2]))
为什么全部都放在访问列表中而不是名称中

好了,我终于找到了解决办法! 我必须使用

    @XStreamImplicit(itemFieldName = "row")

现在两个列表都已填写。

您好,欢迎来到Stackoverflow。我真的很高兴你加入了这个社区,第一个问题写得非常好。据我所知,XML不能像JSON那样显式地表示列表。把列表映射到多个元素,每个元素都有和属性,怎么样?Thx:)是的,这个结构很好,我找到了XStream的教程。但问题是(也许我应该在问题中写出来)我从fritz.box得到这个XML响应,所以我无法更改结构。我认为使用XStream会很容易,所以我不必自己解析xml。
@Data
@NoArgsConstructor
class Rights {
    @XStreamImplicit
    @XStreamAlias("Name")
    private List<String> names = new ArrayList<>();
    @XStreamAlias("Access")
    @XStreamImplicit
    private List<String> accesses = new ArrayList<>();
}
  XStream xStream = new XStream();
      xStream.processAnnotations(SessionInfo.class);
      xStream.processAnnotations(Rights.class);
      return (SessionInfo) xStream.fromXML(response.body().toString());
SessionInfo(sid=518e58erc70e226, challenge=rersrerer, blockTime=0, rights=Rights(names=[], accesses=[Dial, 2, App, 2, HomeAuto, 2, BoxAdmin, 2, Phone, 2, NAS, 2]))
    @XStreamImplicit(itemFieldName = "row")