使用serde反序列化JSON字段(包含可能的选项)

kgqe7b3p  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(104)

我尝试使用serde json反序列化来支持使用枚举的“choices”,但是它不工作(我有python枚举背景),假设我有这个json:

{"name": "content", "state": "open"}

并且state可以是openclosed
在python中,我只需要创建一个枚举,状态类型就是那个枚举,例如:

#[derive(Deserialize)]
enum State {
    Open(String),
    Closed(String),
}

#[derive(Deserialize)]
struct MyStruct {
    name: String,
    state: State,
}

问题是,我不知道如何将open反串行化为State::Open,以及将closed反串行化为State::Closed,我曾考虑过实现自己的反串行化器,但对我来说,它似乎非常复杂和先进。
有没有直接办法?

nbnkbykc

nbnkbykc1#

你应该删除String,然后你会得到另一个错误:

unknown variant `open`, expected `Open` or `Closed`

因为您的枚举变量使用的是PascalCase,而JSON使用的是camelCase(或者snake_case,我不知道)。

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
enum State {
    Open,
    Closed,
}

相关问题