我试图将枚举变量的名称作为serde期望/创建的字符串获取。例如,假设我有以下枚举:
#[derive(Serialize, Deserialize)]
#[serde(rename_all="camelCase")]
pub enum SomeEnum {
WithoutValue,
withValue(i32),
}
如何获取变体的serde名称?就像这样
serde::key_name(SomeEnum::WithoutValue) // should be `withoutValue`
serde::key_name(SomeEnum::WithValue) // should be `withValue`
我可以使用 serde_json
的技巧,对于没有值的变体,我可以这样做:
serde_json::to_string(SomeEnum::WithoutValue).unwrap(); // yields `"withoutValue"` with quotation marks
这并不是最好的解决方案,因为我需要去掉引号,但从技术上讲可以工作。
更糟糕的是当枚举变量有一个值时,它会变得更加混乱。
serde_json::to_string(SomeEnum::WithValue(0)).unwrap(); // yields `"{\"second\":0}"
有没有一种简洁的方法来实现这个?我找不到一个能够获取键名作为字符串的serde API。
#[derive(Serialize, Deserialize)]
扩展中硬编码的值。你对此有什么用处?也许有另一种解决问题的方法。 - trent