我有以下结构
#[derive(Serialize)]
pub struct MyStruct {
pub id: String,
pub score: f32,
pub json: String,
}
json
字段始终包含已字符串化的有效JSON对象。
给定一个示例,我想用JSON内容序列化它。类似于:
let a = MyStruct {
id: "my-id".to_owned(),
score: 20.3,
json: r#"{
"ffo": 4
}"#,
};
let r = to_string(&a).unwrap();
assert_eq!(r, r#"{
"id": "my-id",
"score": 20.3,
"json": {
"ffo": 4
}
}"#);
注意:我不需要支持不同的序列化格式,只需要支持JSON。NB2:我确信json
字段始终包含有效的JSON对象。NB3:我通常使用serde,但我愿意使用不同的库。
我该怎么做?
编辑:如果可能的话,我希望避免在序列化过程中对字符串进行反序列化。
2条答案
按热度按时间tvmytwxo1#
serde_json
有一个raw_value
的特性,类似于这样的功能:Cargo.toml
lib.rs
但最简单(也是最容易出错和最不可扩展)的解决方案是简单的字符串操作:
3zwtqj6y2#
您可以这样做,但必须以某种方式覆盖默认的序列化行为。您可以通过将
json
字段 Package 在一个新类型中(如struct JsonString(String)
,并为该类型手动实现Serialize
,或者您可以使用#[serde(serialize_with = "...")]
字段属性临时更改json
字段的序列化。下面是使用serialize_with
字段属性的示例:Playground.