我正在尝试使用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 结构的一部分,或者我可以将其省略并单独处理吗?
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
方法写入其余数据。