java - 反序列化时的 xstream 转换异常

标签 java xstream

使用 xstream 反序列化时,我遇到以下异常:

com.thoughtworks.xstream.converters.ConversionException: Element service of type com.config.Service is not defined as field in type com.config.Service

---- Debugging information ----

class : com.config.ServiceNServiceConfigurations

required-type : com.config.Service

path : /root/services/service

我的 XML 是:

<root>
    <services>
      <service>
        <Id>10</Id>
        <Name>CM</Name>
      </service>
      <service>
        <Id>11</Id>
        <Name>TM</Name>
      </service>
    </services>
    <serviceConfigurations>
      <serviceConfiguration>
        <Key>XYZ</Key>
        <Value>42</Value>
      </serviceConfiguration>
      <serviceConfiguration>
        <Key>ABC</Key>
        <Value>5</Value>
      </serviceConfiguration>
    </serviceConfigurations>
</root>

我创建了一个与根标签相对应的类,如下所示:

public class ServiceNServiceConfigurations implements Serializable {
    private List<ServiceConfiguration> serviceConfigurations;
    private List<Service> services;
    // setter and getter methods
}
public class Service implements Serializable {
    private String Id;
    private String Name;
    // setter and getter methods
}
public class ServiceConfiguration implements Serializable{
    private String key; 
    private String value;
    // setter and getter methods
}

在反序列化测试类中,我编写了以下代码:

   XStream xstream = new XStream();
        xstream.alias("root", com.config.ServiceNServiceConfigurations.class);
        xstream.alias("service",com.config.Service.class);
        xstream.alias("serviceConfiguration",com.config.ServiceConfiguration.class);
        xstream.addImplicitCollection(ServiceNServiceConfigurations.class, "services", Service.class);
        xstream.addImplicitCollection(ServiceNServiceConfigurations.class, "serviceConfigurations", ServiceConfiguration.class);
        xstream.aliasField("Key", com.config.ServiceConfiguration.class, "key");
        xstream.aliasField("Value", com.config.ServiceConfiguration.class, "value");
        At below line Conversion Exception is coming
obj = xstream.fromXML(xmlSerialized);

请指导我哪里出错了。

谢谢

最佳答案

您应该删除 addImplicitCollection 配置,因为您的集合不是隐式的。

XStream xstream = new XStream();
        xstream.alias("root", com.config.ServiceNServiceConfigurations.class);
        xstream.alias("service",com.config.Service.class);
        xstream.alias("serviceConfiguration",com.config.ServiceConfiguration.class);
        xstream.aliasField("Key", com.config.ServiceConfiguration.class, "key");
        xstream.aliasField("Value", com.config.ServiceConfiguration.class, "value");

如果它们是隐式的,您的 xml 将如下所示:

<root>
  <serviceConfiguration>
    <Key>XYZ</Key>
    <Value>42</Value>
  </serviceConfiguration>
  <serviceConfiguration>
    <Key>ABC</Key>
    <Value>5</Value>
  </serviceConfiguration>
  <service>
    <Id>10</Id>
    <Name>CM</Name>
  </service>
  <service>
    <Id>11</Id>
    <Name>TM</Name>
  </service>
</root>

关于java - 反序列化时的 xstream 转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692015/

相关文章:

java - 使用 libopencore-amr 支持为 ARM 构建 ffmpeg

java - 通过 Phoenix 连接到 Test Hbase 表

android - Libgdx、传递依赖 Android、Java 库项目、Jar

java - XStream JavaBeanConverter 不序列化属性

android - 使用 Xstream 的 Xml 解析对于 android 中的大型 xml 文件来说太慢了

java - 处理嵌套事件

java - 几张照片后相机 Intent 使我的应用程序崩溃

java - Maven 无法下载 jar 依赖项

java - XStream XmlPullParserException

java - 是否可以使用 XStream 将对象字段隐式添加到 XML 中?