我已经尝试了一段时间了。 在第一种方法中,我阅读了以下XML,并且非常适合此类。
<?xml version="1.0" encoding="UTF-8"?>
<SessionInfo>
<SID>984d8edferer73201ac3f</SID>
<Challenge>65892d4a</Challenge>
<BlockTime>0</BlockTime>
<Rights>
</Rights>
</SessionInfo>
使用此类
@XStreamAlias("SessionInfo")
@Data
public class SessionInfo {
private String SID;
private String Challenge;
private String BlockTime;
private String Rights;
}
现在我尝试阅读此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>
,问题出在“权限”下的条目。理想情况下,我希望在对象的末尾有一个
我尝试使用列表,但是没有用。 有人可以帮忙吗?
编辑: 我只是尝试了另一个...我想我更接近目标了,但仍然无法达到预期的效果。 现在我正在使用两个类:
@XStreamAlias("SessionInfo")
@Data
@NoArgsConstructor
public class SessionInfo {
@XStreamAlias("SID")
private String sid;
@XStreamAlias("Challenge")
private String challenge;
@XStreamAlias("BlockTime")
private String blockTime;
@XStreamAlias("Rights")
private Rights rights;
}
和
@Data
@NoArgsConstructor
class Rights {
@XStreamImplicit
@XStreamAlias("Name")
private List<String> names = new ArrayList<>();
@XStreamAlias("Access")
@XStreamImplicit
private List<String> accesses = new ArrayList<>();
}
和XStream
XStream xStream = new XStream();
xStream.processAnnotations(SessionInfo.class);
xStream.processAnnotations(Rights.class);
return (SessionInfo) xStream.fromXML(response.body().toString());
然后我得到了我的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")
现在两个列表都已填充。