此函数来自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 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)
}
但是,serde_json::from_reader
行上的错误消息是:
特征绑定的CCD_ 2不满足由于DeserializeOwned
对T
rustcE0277的impl的要求而需要lib.rs(1,1(:此中的绑定所必需de.rs(2500,8(:from_reader
中此绑定所需blocks.rs(62,17(:考虑限制类型参数T
您不能反序列化为"任何类型化对象";,仅转换为实现CCD_ 7或CCD_。
由于您不保留JSON,因此希望使用DeserializeOwned
:
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)
}