gpt4 book ai didi

rust - 使用多个模式结构反序列化 XML

转载 作者:行者123 更新时间:2023-11-29 08:31:13 35 4
gpt4 key购买 nike

如何反序列化由可能具有不同子项的 API 返回的 XML 字符串(使用 serde 派生)?

如果我调用 API,它可能会返回以下结果集之一:

use serde::Deserialize;
use serde_xml_rs::from_str;

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
struct Error {
code: u32,
message: String,
}

#[derive(Debug, Deserialize)]
struct Item {
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
struct DataSet {
error: Option<Error>,

data: Option<Vec<Item>>
}

fn main() {
let error = r#"
<DataSet>
<Error>
<Code>0</Code>
<Message>error</Message>
</Error>
</DataSet>
"#;

let dataset: DataSet = from_str(error).unwrap();
println!("{:#?}", dataset);

let items = r#"
<DataSet>
<Item>..</Item>
<Item>..</Item>
</DataSet>
"#;

let dataset: DataSet = from_str(items).unwrap();
println!("{:#?}", dataset);
}
[package]
name = "dataset"
version = "0.1.0"
edition = "2018"

[dependencies]
serde = { version = "1", features = ["derive"] }
serde-xml-rs = "0.3"

但我觉得应该有一种更惯用的方法来实现这一点。特别是因为它会使数据匹配变得容易得多。

我试过使用 #[serde(flatten)],我试过将 ApiResponse 设置为元组结构和具有单个元组参数的结构.运气不好。

这是否可能无需构建自定义反序列化器?

最佳答案

看看一些 serde examples这可能会在这里帮助你。特别是关于未标记枚举的示例/文档,它允许您定义多种反序列化为单个枚举类型的方法。

关于rust - 使用多个模式结构反序列化 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57210361/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com