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

时间:2016-09-22 13:49:38

标签: java xml serialization xstream

我必须将组织类型的有序对象转换为XML文件。 所述类型包含原始类型和String对象,以及其他引用类型对象。

以下是组织

的字段
String orgName;
double capital;
Individual generalDirector;
Investor investor;

接下来是投资者

Individual name;
double sharesPercentage;

最后个人

String firstName;
String lastName;

如您所见,组织投资者都包含对个人类型对象的引用。

问题是,对于组织对象,我需要在XML中显示 firstName lastName ,并且只需要 lastName 对于投资者对象,因此完全省略 firstName 将无效。

我也想省略<'generalDirector'>和<'投资者'>输出中的标记,但将其内容保留在单独的标记中,如:

    <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的名称标记?我知道有一种方法可以用于集合,但是参考对象字段呢?   是否有办法显示组织中包含个人 firstName lastName ,但投资者

1 个答案:

答案 0 :(得分:1)

事实证明,按照我原先想象的方式完成它是不可能的。

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

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

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