![](/img/trans.png)
[英]How do I use Serde to deserialize malformed JSON with True/False?
[英]How do I use `serde_stacker` in my `deserialize` implementation?
我有一個結構,如果我使用serde_stacker
,我只能反序列化。 因此,為了反序列化 struct Bar
我需要先將其轉換為用於保存 JSON 值的serde_json::value::Value
類型,然后將其轉換為所需的Bar
類型。
const SIZE: usize = 30000;
#[derive(Clone, Debug, Serialize, Deserialize)]
struct Foo {
#[serde(with = "BigArray")]
vals: [bool; SIZE],
}
#[derive(Clone, Debug, Serialize, Deserialize)]
struct Bar {
field0: Foo,
}
impl Bar {
fn custom_deserialization_test(instance: Bar) {
let json = serde_json::to_string(&instance).unwrap();
let mut deserializer: serde_json::Deserializer<serde_json::de::StrRead> =
serde_json::Deserializer::from_str(&json);
let deserializer: serde_stacker::Deserializer<
&mut serde_json::Deserializer<serde_json::de::StrRead>,
> = serde_stacker::Deserializer::new(&mut deserializer);
let value: Value = Value::deserialize(deserializer).unwrap();
let target: Bar = from_value(value).unwrap();
}
}
我的問題是:如何覆蓋Bar
的deserialize
化方法以使用serde_stacker
反序列化器而不是像上面那樣使用常規的serde_json
反序列化器?
我可能需要某種包裝器,但最后一行代碼的from_value
函數調用使用Bar
的派生deserialize
化方法從 JSON 對象轉換為Bar
類型。
Bar::deserialize
函數對所使用的Deserializer
是通用的。 這意味着您可以使用serde_stacker::Deserializer
而不是來自serde_json
的Deserializer
。 您發布的代碼片段已經展示了如何在Value
類型上使用serde_stacker
。 您只需將其替換為Bar
。
impl Bar {
fn custom_deserialization_test(instance: Bar) {
let json = serde_json::to_string(&instance).unwrap();
let mut deserializer: serde_json::Deserializer<serde_json::de::StrRead> =
serde_json::Deserializer::from_str(&json);
let deserializer: serde_stacker::Deserializer<
&mut serde_json::Deserializer<serde_json::de::StrRead>,
> = serde_stacker::Deserializer::new(&mut deserializer);
let target = Bar::deserialize(deserializer).unwrap();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.