使用serde反序列化JSON时强制严格排序

使用serde反序列化JSON时强制严格排序,json,serialization,rust,json-deserialization,serde,Json,Serialization,Rust,Json Deserialization,Serde,我想将JSON数据字符串反序列化到具有多个字段的结构中,如果序列化数据的顺序与结构中字段的顺序不匹配,则返回一个错误 我已经通读了,包括关于自定义序列化的部分,但找不到解决方案。我想通过使用字段名检查来实现反序列化器,可能会强制执行严格的排序,但我并不完全确定这一点 以下是以下格式的示例: #[派生(序列化、反序列化)] 结构人{ 名称:String, 年龄:u8, 电话:Vec, } 让正确的顺序=r#” { “姓名”:“约翰·多伊”, “年龄”:43岁, “电话”:[ "+44 123456

我想将JSON数据字符串反序列化到具有多个字段的结构中,如果序列化数据的顺序与结构中字段的顺序不匹配,则返回一个错误

我已经通读了,包括关于自定义序列化的部分,但找不到解决方案。我想通过使用字段名检查来实现
反序列化器
,可能会强制执行严格的排序,但我并不完全确定这一点

以下是以下格式的示例:

#[派生(序列化、反序列化)]
结构人{
名称:String,
年龄:u8,
电话:Vec,
}
让正确的顺序=r#”
{
“姓名”:“约翰·多伊”,
“年龄”:43岁,
“电话”:[
"+44 1234567",
"+44 2345678"
]
}"#;
//这将正确反序列化(无错误)
让p:Person=serde_json::from_str(data)?;
让不正确的顺序=r#”
{
“年龄”:43岁,
“电话”:[
"+44 1234567",
"+44 2345678"
]
“姓名”:“约翰·多伊”
}"#;
//如何确保返回错误?(数据字段顺序错误)
让p2:Person=serde_json::from_str(data)?;

不行,json是一种无序的数据格式。你为什么要这么做?唯一的方法是在hashmap ordered中解析您想要排序的每个字段,但是您将失去很多使serde变得更好的东西。您的预期行为意味着它不再是JSON,而是类似的东西。但是,对于序列化,有
preserve\u order
crater功能,它可以在创建字符串时保持结构顺序,作为允许的多个序列中的一个。感谢您的评论。你说得对,严格来说,它不符合这个订购要求。要求这样做的原因是对象是加密签名的,因此顺序变得很重要。我希望其他人能解决这个问题;)我将查看
indexmap
preserve\u order
。再次感谢。如果要确保有效负载与签名匹配,请执行此操作。我不确定通过强制执行严格的反序列化格式,您希望从serde获得什么好处。无论如何,您必须单独验证它,因为
“age”:43
“age”:45
的格式正确,但可能是错误的。