serde 反序列化泛型的 "borrowed value does not live long enough" 编译器错误

A "borrowed value does not live long enough" compiler error for serde Deserialize generic

为什么 f1() 编译但 f2() 不编译?

fn f1() {
    let s_json = "[]".to_string();
    for i in 0..10 {
        let ve: Vec<Rec1> = serde_json::from_str(&s_json).unwrap();
    }
}

fn f2<'a, T: Deserialize<'a>>() {
    let s_json = "[]".to_string();
    for i in 0..10 {
        let ve: Vec<T> = serde_json::from_str(&s_json).unwrap();
    }
}

编译器输出如下:

| fn fff2<'a, T: Deserialize<'a>>() {
|         -- lifetime `'a` defined here
...
|         let ve: Vec<T> = serde_json::from_str(&s_json).unwrap();
|                          ---------------------^^^^^^^-
|                          |                    |
|                          |                    borrowed value does not live long enough
|                          argument requires that `s_json` is borrowed for `'a`
|     }
| }
| - `s_json` dropped here while still borrowed

我做错了什么?正确的 f2() 签名是什么?

我找到了答案:DeserializeOwned 似乎就是为了这个目的而提供的——避免一生都需要。 我想在 f2() 中没有办法提供更短的生命周期,但是 f1() 不知何故没有这样的限制。