我希望能将一串JSON数据字符串反序列化为一个包含多个字段的结构体,并在序列化数据的顺序与结构体中字段的顺序不匹配时返回错误。
我已经阅读了serde文档,包括自定义序列化部分,但没有找到解决方案。我想通过实现带有字段名称检查的
以下是一个符合serde_json文档格式的示例:
我已经阅读了serde文档,包括自定义序列化部分,但没有找到解决方案。我想通过实现带有字段名称检查的
Deserializer
来强制执行严格的排序,但我对此并不完全确定。以下是一个符合serde_json文档格式的示例:
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u8,
phones: Vec<String>,
}
let correct_order = r#"
{
"name": "John Doe",
"age": 43,
"phones": [
"+44 1234567",
"+44 2345678"
]
}"#;
// this deserializes correctly (no error)
let p: Person = serde_json::from_str(data)?;
let incorrect_order = r#"
{
"age": 43,
"phones": [
"+44 1234567",
"+44 2345678"
]
"name": "John Doe"
}"#;
// how to ensure this returns an error? (data fields out of order)
let p2: Person = serde_json::from_str(data)?;
preserve_order
的箱特性可以在创建字符串时保持结构体的顺序作为允许的许多顺序之一。 - Zólyomi Istvánindexmap
和preserve_order
。再次感谢。 - mycognosist