首页 > 解决方案 > 如何使用 serde 从 XML 属性中反序列化一个数字?

问题描述

u32我想从 XML 属性中反序列化一个数字(例如)。

#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_xml_rs as serde_xml;


#[derive(Deserialize, Debug)]
#[serde(rename = "objects")]
pub struct Objects {
    pub foo: u32
}

fn main() {
    let result_string = r#"<?xml version="1.0" encoding="UTF-8"?>
    <objects foo="42"></objects>"#;
    let deserialized: Objects= serde_xml::deserialize(result_string.as_bytes()).expect("Parse error!");
}

但执行后,我收到以下错误

thread 'main' panicked at 'Parse error!: invalid type: string "42", expected u32'

我知道#[serde(deserialize_with="...")]注释,但有没有更简单的方法(例如使用serde_xml_rscrate)?

标签: rustserde

解决方案


不要使用0.2.1. 添加到 Cargo.toml:

serde-xml-rs = { git= "https://github.com/RReverser/serde-xml-rs.git"}

使用 master 的 serde-xml-rs 可以解决这个问题。


推荐阅读