Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何为serde编写自定义重命名所有属性?_Rust_Serde - Fatal编程技术网

Rust 如何为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

因此,作为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_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
文档在这里提供了一个示例:

我在这里创建了一个完整的工作示例: