Serde在反序列化为常规 struct 时忽略未知的命名字段.在反序列化为元组 struct (例如,从异类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 }
相比之下,这在元组中的额外项上失败:
#[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)
我想在我的数据格式中允许额外的项目以实现向前兼容性.反序列化时,让Serde忽略额外元组项的最简单方法是什么?