【问题标题】:Marshalling not working: In case of nested Dto编组不起作用:在嵌套 Dto 的情况下
【发布时间】:2023-08-16 03:58:01
【问题描述】:

我将我的配置详细信息保存在一个 xml 文件中,它的结构有点像这样

<A>
    <b>
        <name>xxxxx</name>
        <age>xxxxx</age>
        <c>
          <someFeilds>yyyy</someFeilds>
        </c>
        <c>
          <someFeilds>yyyy</someFeilds>
        </c>
        <c>
          <someFeilds>yyyy</someFeilds>
        </c>
    </b>
    <b>
        <name>xxxxx</name>
        <age>xxxxx</age>
        <c>
            <someFeilds>yyyy</someFeilds>
        </c>
    </b>
</A>

我能够将它编组到我的 DTO A whoes 结构是

class A {
    public ArrayList<B> bdtoInst;
}
class B {
    public String name;
    public String age;
    public ArrayList<C> cdtoInst;
}
class C {
    public String someFeilds;
}

Xstream 声明是

    XStream xStream = new XStream();
    xStream.alias("A", A.class);
    xStream.addImplicitCollection(A.class, "bdtoInst");
    xStream.alias("b", B.class);
    xStream.addImplicitCollection(B.class, "cdtoInst");
    xStream.alias("c", C.class);

我可以将它编组到我的 DTO,但是当我解组它时,我没有得到正确的格式,它是这样的:

<A>
    <b>
        <name>xxxxx</name>
        <age>xxxxx</age>
        <c>
            <someFeilds>yyyy</someFeilds>
        </c>
        <c>
            <someFeilds>yyyy</someFeilds>
        </c>
        <c>
            <someFeilds>yyyy</someFeilds>
        </c>
        <c>
            <someFeilds>yyyy</someFeilds>
        </c>
    </b>
    <b>
        <name>xxxxx</name>
        <age>xxxxx</age>
        <c reference="../../b/c"/>
    </b>
</A>

我正在使用 xstream-1.4.3.jar。

【问题讨论】:

  • 我得到 因为 xstream 链接中使用了 XPATH_RELATIVE_REFERENCES:xstream.codehaus.org/graphs.html,但我无法理解为什么所有 正在进入第一个节点。
  • C-class 只有一个字符串变量,但您为其提供了多个值。
  • 是的,我的错误我做了上面的更改。

标签: java serialization xml-serialization xstream


【解决方案1】:

因为 xstream 链接中使用了 XPATH_RELATIVE_REFERENCES:xstream.codehaus.org/graphs.html 在 xstream 声明中我们必须添加

  xstream.setMode(XStream.NO_REFERENCES);

将放置参考值而不是标记。

【讨论】:

    最近更新 更多