当反序列化为常规结构时,Serde会忽略未知的命名字段。在反序列化为元组结构时(例如从异构JSON数组),我如何类似地忽略多余的项目?
例如,这段代码忽略了多余的"c"字段:
#[derive(Serialize, Deserialize, Debug)]
pub struct MyStruct { a: String, b: i32 }
fn test_deserialize() -> MyStruct {
::serde_json::from_str::<MyStruct>(r#"
{
"a": "foo",
"b": 123,
"c": "ignore me"
}
"#).unwrap()
}
// => MyStruct { a: "foo", b: 123 }
Run Code Online (Sandbox Code Playgroud)
相比之下,这在元组中的额外项上失败:
#[derive(Serialize, Deserialize, Debug)]
pub struct MyTuple(String, i32);
fn test_deserialize_tuple() -> MyTuple {
::serde_json::from_str::<MyTuple>(r#"
[
"foo",
123,
"ignore me"
]
"#).unwrap()
}
// => Error("trailing characters", line: 5, column: 13)
Run Code Online (Sandbox Code Playgroud)
我想允许其他项目以我的数据格式向前兼容。反序列化时让Serde忽略多余的元组项的最简单方法是什么?