我有一个serde注释的结构体树,成功解析了样本XML,包括这个片段:
<bmsg>
<cmsg>
<!-- ... -->
<cmsg>
<bmsg>
现在我正在使用一个大样本XML文件进行测试,以下结构体失败是因为有时会缺少<cmsg>..</cmsg>
。我是使用以下方式进行反序列化的:
#[derive(Serialize,Deserialize, Debug)]
struct A {
#[serde(rename="bmsg")]
messages: B, // <====
}
#[derive(Serialize,Deserialize, Debug)]
struct B { // bmsg
#[serde(rename="cmsg")]
list: Vec<C>,
}
这导致第二个结构体出现错误:
panicked at 'called `Result::unwrap()` on an `Err` value: missing field `cmsg`
我将第一个结构体更改为具有Vec<>
,以便可以处理可选元素:
#[derive(Serialize,Deserialize, Debug)]
struct A {
#[serde(rename="bmsg")]
messages: Vec<B>, // <====
}
#[derive(Serialize,Deserialize, Debug)]
struct B { // bmsg
#[serde(rename="cmsg")]
list: Vec<C>,
}
但是serde仍然给出相同的错误。我也尝试了
Option<>
,但没有任何进展。最让我困惑的是,我在很多地方都使用
Vec<>
,从未遇到过这个问题。