Rust:如何为具有泛型类型的结构派生反序列化?

Rust: how to derive Deserialize for struct with generic types?

#[derive(Deserialize)]
struct S<'d, T>
  where T: Deserialize<'d>
{
  foo: T,
  other_field: String
}

以上代码编译失败,报错未使用的生命周期参数, 但如果我删除它,Deserialize 将失去生命周期。

不使用幻影标记或DeserializeOwned是否可以使上述代码正确?

如果您完全删除 where 子句,则代码可以正常工作。派生将为派生的 Deserialize<'de> 实现自动添加 T: Deserialize<'de> 绑定。

#[derive(Deserialize)]
struct S<T> {
  foo: T,
  other_field: String
}

对于 Rust,在 struct/enum 声明中不限制泛型类型是很常见的。通用类型仅受限于 impl 需要行为的块。