Ich habe einen Baum von serde-kommentierte structs und es gelingt in der Probe des Parsen von XML, einschließlich diesem Fragment:fehlgeschlagen mit serde-xml-rs XML mit einem optionalen Elemente analysieren
<bmsg>
<cmsg>
<!-- ... -->
<cmsg>
<bmsg>
Jetzt bin ich Prüfung mit einer großen Beispiel-XML-Datei und die folgenden Strukturen fehlschlagen, weil manchmal <cmsg>..</cmsg>
fehlt. Ich war Deserialisieren dies mit:
#[derive(Serialize,Deserialize, Debug)]
struct A {
#[serde(rename="bmsg")]
messages: B, // <====
}
#[derive(Serialize,Deserialize, Debug)]
struct B { // bmsg
#[serde(rename="cmsg")]
list: Vec<C>,
}
, die in einem Fehler in der zweiten Struktur ergaben:
panicked at 'called `Result::unwrap()` on an `Err` value: missing field `cmsg`
ich die erste Struktur geändert hat einen Vec<>
so kann es mit einem optionalen Elemente befassen:
#[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>,
}
Aber Serde gibt weiterhin den gleichen Fehler. Ich habe auch versucht Option<>
, aber kam nirgendwo hin.
Was mich am meisten verwirrt ist, dass ich überall Vec<>
benutze und nie in dieses Problem lief.
Dies ist eine korrekte und sehr gut ausgearbeitete Antwort. Hinweis Ich habe versucht, # [serde (default)], aber nur auf der ersten struct:/Vielen Dank! – user103185