serde-xml-rs对u8进行反序列化的方法有效,但对u16不起作用

时间:2019-01-04 15:30:56

标签: xml rust serde

我试图将xml文档反序列化为自定义rust类。随附的代码是我问题的最简单形式。尝试反序列化除u8以外的任何类型的数字值时,给出的错误是'main'在'Result::unwrap()值上调用'Err时惊慌:无效类型:字符串“ 99”,预期的u16'或无论所需的类型是什么。 serde_xml_rs似乎将字符串值转换为u8的适当数字值,而不是其他类型。我在做错什么吗?

#[macro_use]
extern crate serde_derive;

extern crate serde;
extern crate serde_xml_rs;

fn main() {
    weird_example();
}



#[derive(Deserialize, Debug)]
struct SampleStruct {
    name: String,
    num_u8: u8,
    num_u16: u16,
}

fn weird_example (){
    let deser: SampleStruct = serde_xml_rs::deserialize(r##"
        <?xml version="1.0" encoding="utf-8"?>
        <sample_struct name="Sample" num_u8="99" num_u16="99">
        </sample_struct>
    "##.as_bytes()).unwrap();
    println!("{:#?}", deser);
}

1 个答案:

答案 0 :(得分:2)

这个箱子不是很活跃;这是一个已修复但尚未发布的known bug。您可以直接使用master分支:

errorHandler

然后将void foo() { std::string message, funcName; message = "Error"; funcName = __PRETTY_FUNCTION__; errorHandler(message, 0 , funcName); } 替换为serde-xml-rs = { git = "https://github.com/RReverser/serde-xml-rs" }


0.3.0刚出来!

因此您可以使用经典版本:

serde_xml_rs::deserialize