Rust 如何为serde编写自定义重命名所有属性?
因此,作为Rust的新手,我需要将json从“title-case”格式反序列化为snake-case格式(例如,{“Car-Prop”:1,“Door-Prop”:2})。Rust中的serde库似乎提供了除此之外的所有通用格式 1) 这段代码叫什么?#[serde(rename_all=“…”)?这是对宏规则的引用吗?如果是这样的话,我可以在serde代码中的哪里查找它Rust 如何为serde编写自定义重命名所有属性?,rust,serde,Rust,Serde,因此,作为Rust的新手,我需要将json从“title-case”格式反序列化为snake-case格式(例如,{“Car-Prop”:1,“Door-Prop”:2})。Rust中的serde库似乎提供了除此之外的所有通用格式 1) 这段代码叫什么?#[serde(rename_all=“…”)?这是对宏规则的引用吗?如果是这样的话,我可以在serde代码中的哪里查找它 2) 如何实现我自己的自定义“container attr”,将“title case”json反序列化为snake_ca
2) 如何实现我自己的自定义“container attr”,将“title case”json反序列化为snake_case中具有属性的结构?我意识到这可能会涉及到很多问题,因此,即使回答1也会帮我找到正确的方向,谢谢。据我所知,目前不可能添加其他重命名规则。关于你的第一个问题,是的,这是一个宏。如果查看
serde_derivate
代码,您将看到宏使用的是一个包含所有可用重命名规则的枚举
因此,您可能无法使用serde宏来实现所需的功能,但可以编写自己的序列化和反序列化代码。因此,与其让宏生成它,不如自己编写它
自定义序列化程序的外观如下所示:
#[派生(调试)]
结构消息{
foo_bar:字符串,
巴鲁福:字符串
}
消息的impl序列化{
fn serialize(&self,serializer:S)->结果,其中
S:序列化程序{
让mut state=serializer.serialize_struct(“Message”,1)?;
state.serialize_字段(“foobar”和self.foobar)?;
state.serialize_字段(“Bar Foo”和self.Bar_Foo)?;
state.end()
}
}
创建反序列化程序有点复杂,但是serde
文档在这里提供了一个示例:
我在这里创建了一个完整的工作示例: