Rust 用于强类型对象的通用serde_json反序列化函数

Rust 用于强类型对象的通用serde_json反序列化函数,rust,Rust,此函数来自serde_json文档: fn read_user_from_file<P: AsRef<Path>>(path: P) -> Result<User, Box<dyn Error>> { // Open the file in read-only mode with buffer. let file = File::open(path)?; let reader = BufReader::new(file

此函数来自serde_json文档:

fn read_user_from_file<P: AsRef<Path>>(path: P) -> Result<User, Box<dyn Error>> {
    // Open the file in read-only mode with buffer.
    let file = File::open(path)?;
    let reader = BufReader::new(file);

    // Read the JSON contents of the file as an instance of `User`.
    let u = serde_json::from_reader(reader)?;

    // Return the `User`.
    Ok(u)
}
fn从\u文件(路径:P)读取\u用户\u->结果{
//使用缓冲区以只读模式打开文件。
让文件=文件::打开(路径)?;
让reader=BufReader::new(文件);
//作为“User”的实例读取文件的JSON内容。
让u=serde_json::from_reader(reader)?;
//返回“用户”。
Ok(u)
}
我想让它更通用,这样我就可以反序列化到任何类型的对象。然后,我可以对多个对象使用该函数

fn read_user_from_file<T,P: AsRef<Path>>(path: P) -> Result<T, Box<dyn Error>> {
    // Open the file in read-only mode with buffer.
    let file = File::open(path)?;
    let reader = BufReader::new(file);

    let t:T = serde_json::from_reader(reader)?;

    // Return the `User`.
    Ok(t)
}

fn从\u文件(路径:P)读取\u用户\u->结果{
//使用缓冲区以只读模式打开文件。
让文件=文件::打开(路径)?;
让reader=BufReader::new(文件);
让t:t=serde_json::from_reader(reader)?;
//返回“用户”。
Ok(t)
}
但是,
serde_json::from_reader
行上的错误消息是:

不满足的特征界限

由于
T
rustcE0277的
反序列化所有
的实施要求,需要
lib.rs(1,1):此
de.rs(2500,8):此绑定在
from_reader

块(RS)(62, 17):考虑限制类型参数<代码> t>代码>

< p>不能反序列化为“任何类型的对象”,只能实现一个实现<代码>反序列化的结果。 哪里 T:反序列化拥有, P:AsRef, { //使用缓冲区以只读模式打开文件。 让文件=文件::打开(路径)?; 让reader=BufReader::new(文件); 让t:t=serde_json::from_reader(reader)?; //返回“用户”。 Ok(t) }
fn read_user_from_file<T, P>(path: P) -> Result<T, Box<dyn Error>>
where
    T: DeserializeOwned,
    P: AsRef<Path>,
{
    // Open the file in read-only mode with buffer.
    let file = File::open(path)?;
    let reader = BufReader::new(file);

    let t:T = serde_json::from_reader(reader)?;

    // Return the `User`.
    Ok(t)
}