Rust 用于强类型对象的通用serde_json反序列化函数
此函数来自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
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)
}