我有一个JSON对象,其中包含一些元数据键和大量的数据有效负载。我的服务关心元数据以用于日志记录和路由,但不关心有效负载,除了将有效负载传递给另一个服务外。我将永远不需要出于任何原因查看有效负载的内部。
现在,有效负载在我的结构中表示为serde_json :: Value
。通过分析,我看到(反)序列化Value
需要相当长的时间。
在Serde中是否有一种机制可以在不必将其反序列化为组件值的情况下捆绑有效负载,只需稍后重新对其进行序列化即可避免性能成本?
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
#[derive(Serialize, Deserialize)]
struct DataBlob<'a> {
id: &'a str,
priority: u8,
// payload: OpaqueValue,
}
fn main() {
let input = r#"{
"id": "cat",
"priority": 42,
"payload": [1, 2, 3, 4]
}"#;
let parsed = serde_json::from_str::<DataBlob>(input).expect("Could not deserialize");
let output = serde_json::to_string(&parsed).expect("Could not serialize");
assert!(output.contains("payload"));
}
id
和priority
,但不反序列化payload
,然后稍后重新序列化一个具有不同id
和/或priority
,但仍具有相同(已序列化)的payload
的对象? - MutantOctopuspayload
值转换为json子字符串,然后使用new
将其插入到Deserializer中,类似地,对于序列化,可以使用Write
和Format
进行类似操作。我不太熟悉serde,所以不敢将其发布为完整答案。 - MutantOctopus