使用 serde 序列化结构时如何展平“Vec”字段?

8bi*_*ree 5 xml rust serde

我有一些 XML,它的标签包含多个同名的同级标签,如下所示:

<foo>
    <bar/>
    <bar/>
</foo>
Run Code Online (Sandbox Code Playgroud)

(也可能有多个顶级<foo>,尽管我还没有抽出时间尝试(反)序列化它。)

使用此代码:

<foo>
    <bar/>
    <bar/>
</foo>
Run Code Online (Sandbox Code Playgroud)

并且不要忘记激活序列化功能:

[dependencies.quick-xml]
version = "0.18.1"
features = ["serialize"]
Run Code Online (Sandbox Code Playgroud)

我可以很好地反序列化,但是序列化添加了一个额外的<bar>标签作为bars包装实际<bar>标签的字段:

<Foo>
    <bar>
        <bar></bar>
        <bar></bar>
    </bar>
</Foo>
Run Code Online (Sandbox Code Playgroud)

#[serde(rename = "bar", default)]在现场,bars我第一次尝试根据fast-xml 的文档来解决这个问题,但它显然不起作用。我还查看了 serde 的文档,确实找到了一个flatten属性,但当我尝试将其应用到该领域时,它似乎不起作用bars

除了手动实现之外,有什么方法可以获得我需要的序列化吗Deserialize

如果相关的话,我尝试使用的实际数据格式是flam3 文件格式这里有一个示例文件。该<flame>元素相当于<foo>此处,并且<xform>相当于<bar>

sch*_*ach 0

不幸的是你不能。GitHub 上有一个未解决的问题可以解决您的问题。