使用quick_xml和serde序列化数据时如何添加xml声明?

问题描述 投票:0回答:1

我正在尝试使用quick_xml的serde功能在xml和rust之间进行序列化和反序列化。下面显示的一个最小示例效果很好。然而,当我序列化回 xml 时,我不再有 xml 声明,这是有道理的,因为我没有将它作为 rust 结构的一部分。

#[derive(Default, PartialEq, Debug, Serialize, Deserialize)]
#[serde(rename = "response", default)]
pub struct Response {
    pub protocol: String,
    pub server: String,
}

由此反序列化:

<?xml version="1.0" encoding="UTF-8"?>
<response protocol="3.0" server="prod">
</response>

序列化如下所示:

<response protocol="3.0" server="prod">
</response>

我的问题是,在序列化回 xml 时包含声明的最佳方式是什么。似乎有一个

Event::Decl
可以处理这个问题,但我不确定通过 serde 的使用情况。该声明是否应该成为我的 Rust 结构的一部分,或者我可以将其省略并单独处理吗?

xml rust serde
1个回答
0
投票

如果有人仍在寻找解决方案,您可以使用

Writer
方法使用
write_event
实例编写 XML 声明:

let mut writer = quick_xml::Writer::new(/* your destination */);
writer.write_event(Event::Decl(BytesDecl::new("1.0", Some("UTF-8"), None)))?;

然后您可以继续处理

writer
或使用
write_serializable
方法写入其余数据。

© www.soinside.com 2019 - 2024. All rights reserved.