我使用可序列化和反序列化的泛型。但是,派生属性上存在错误,Deserialize
表明无法推断类型。
结构体和枚举都会引发编译错误。评论其中之一不会解决任何问题。
use serde::{Deserialize, Serialize}; // 1.0.104
#[derive(Serialize, Deserialize)]
struct Jhon<A>
where
A: Serialize + for<'a> Deserialize<'a>,
{
foo: Foo<A>,
}
#[derive(Serialize, Deserialize)]
enum Foo<A>
where
A: Serialize + for<'a> Deserialize<'a>,
{
A,
B(A),
}
Run Code Online (Sandbox Code Playgroud)
use serde::{Deserialize, Serialize}; // 1.0.104
#[derive(Serialize, Deserialize)]
struct Jhon<A>
where
A: Serialize + for<'a> Deserialize<'a>,
{
foo: Foo<A>,
}
#[derive(Serialize, Deserialize)]
enum Foo<A>
where
A: Serialize + for<'a> Deserialize<'a>,
{
A,
B(A),
}
Run Code Online (Sandbox Code Playgroud)
你不需要特质界限。通常也不建议在结构上这样做。这段代码的工作原理:
#[derive(Clone, Serialize, Deserialize)]
struct Jhon<A> {
foo: Foo<A>
}
#[derive(Clone, Serialize, Deserialize)]
enum Foo<A> {
A,
B(A)
}
Run Code Online (Sandbox Code Playgroud)
当您使用其宏实现时, Serde 会自动尝试确定其边界Deserialize
和实现。要使用自定义边界,您需要告诉 Serde 您正在使用属性来执行此操作。Serialize
derive
#[serde(bound = "...")]
#[derive(Clone, Serialize, Deserialize)]
#[serde(bound = "A: Serialize + for<'a> A: Deserialize<'a>")]
struct Jhon<A> where A: Serialize + for<'a> Deserialize<'a>{
foo: Foo<A>
}
#[derive(Clone, Serialize, Deserialize)]
#[serde(bound = "A: Serialize + for<'a> A: Deserialize<'a>")]
enum Foo<A> where A: Serialize + for<'a> Deserialize<'a>, {
A,
B(A)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2676 次 |
最近记录: |