我使用的是Rust和Serde。假设我有一个结构体,它希望保留创建它的JSON数据的副本,也许这样它就可以在其他地方重新发送相同的JSON而不必重新序列化。(这并不像保留原始JSON数据的副本那么简单,因为结构体可能包含更多的JSON数据。)示例:
#[derive(Deserialize)]
struct LargerStruct {
value: i32,
inner: InnerStruct,
}
#[derive(Deserialize)]
struct InnerStruct {
this_json: String,
inner_value: i32,
}
fn main() {
let json = r#"
{
"value": 42,
"inner": { "inner_value": 100 }
}
"#;
let val: LargerStruct = // ???
assert_eq!(&val.inner.this_json, r#"{ "inner_value": 100 }"#);
}
???
的评论可以用什么来填充?
1条答案
按热度按时间lhcgjxsq1#
Playground
您可以使用
serde_json::value::RawValue
类型以原始形式捕获原始JSON。代码使用InnerStruct
的自定义Deserialize
实现来实现捕获JSON并反序列化的目标。它通过在Deserialize
实现中再次调用serde_json
来反序列化结构体。这是必要的,因为deserializer
在解串RawValue
之后被消耗。