【问题标题】:Is it possible to implicitly add object fields to XML using XStream?是否可以使用 XStream 将对象字段隐式添加到 XML?
【发布时间】:2016-09-22 13:49:37
【问题描述】:

我必须将 Organization 类型的一组排序对象转换为 XML 文件。 所述类型除了原始类型和字符串对象外,还包含其他引用类型对象。

以下是组织的领域:

String orgName;
double capital;
Individual generalDirector;
Investor investor;

接下来是投资者:

Individual name;
double sharesPercentage;

最后是个人:

String firstName;
String lastName;

如您所见,Organization 和 Investor 都包含对 Individual 类型对象的引用。

问题是,我需要 firstName 和 lastName 以 XML 形式显示 Organization 对象,并且只需要 lastName 对于 Investor 对象,因此完全省略 firstName 是行不通的。

我还想从输出中省略 和 标签,但将它们的内容放在单独的标签中,如下所示:

    <organization>
        <orgName>Dummy Solutions</orgName>
        <capital>50000</capital>
        <dirFirstName>Jacob</dirFirstName>
        <dirLastName>Smith</dirLastName>
        <investor>
            <lastName>Johnson</lastName>
            <sharePercentage>5.13</sharePercentage>
        </investor>
    </organization>

但 XStream 是通过以下方式对其进行转换的:

  <organization>
      <orgName>Dummy Solutions</orgName>
      <generalDirector>
          <firstName>Jacob</firstName>
          <lastName>Smith</lastName>
      </generalDirector>
      <capital>50000</capital>
      <investor>
          <name>
              <firstName>NotSpecified</firstName>
              <lastName>Johnson</lastName>
          </name>
          <sharesPercentage>5.13</sharesPercentage>
      </investor>
  </organization>

我怎样才能去掉 generalDirector 和 Investor 的 name 标签而不删除它们的内容?我知道有一种方法可以用于集合,但是引用对象字段呢?
有没有办法同时显示组织中包含的个人的firstName和lastName,而不是Investor?

【问题讨论】:

    标签: java xml serialization xstream


    【解决方案1】:

    事实证明,完全按照我最初想象的方式去做是不可能的。

    但是,我的问题的解决方案是以custom Converter 的形式出现的,它实现了 XStream 包中的 Converter 接口。在这样的转换器内部,可以指定一种序列化/反序列化特定对象类的方法。

    这样做后,解决方案就像在当前 XStream 实例中注册指定的转换器一样简单,如下所示:

    XStream xstream = new XStream();
    xstream.registerConverter(new YourCustomConverter());
    

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 2021-01-08
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2012-01-13
      相关资源
      最近更新 更多