相关疑难解决方法(0)

使用Serde反序列化时,如何忽略多余的元组项?(“尾随字符”错误)

当反序列化为常规结构时,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忽略多余的元组项的最简单方法是什么?

rust serde

10
推荐指数
1
解决办法
312
查看次数

标签 统计

rust ×1

serde ×1