如何将字符串解析为与第 3 方板条箱中的类型不匹配的大小写?

How to parse a string to case which doesn't match the type in 3rd party crate?

所以这是来自第 3 方库的一些代码:

#[derive(Debug, PartialEq, Eq, Hash, Clone, Serialize, Deserialize, Copy, Ord, PartialOrd)]
pub enum ViewingMetric {
    RatingPercentage,
    Rating
}

而我想要的是解析像“rating_percentage”这样的字符串,而不能将 #[serde(rename_all = "...")] 添加到第 3 方代码中。我可以在调用 serde_json::from_str 期间以某种方式指定重命名吗?或者我必须添加另一个处理外壳之间转换的第 3 方库吗?

how to derive Serde for remote creates 上有一个指南,您可以在其中自定义您需要的任何内容:

会是这样的:

#[derive(Serialize, Deserialize)]
#[serde(remote = "OtherCrate::ViewingMetric", rename_all = "snake_case")]
enum ViwingMetricSerde {
    RatingPercentage,
    Rating
}

重要,您必须实施 From/Into 从您的新类型到远程类型 From<ViwingMetricSerde> for ViwingMetric

然后从你的代码中,实际得到原始类型:

#[derive(Serialize, Deserialize)]
pub struct MyStruct {
    #[serde(with = "ViwingMetricSerde")]
    metric: ViwingMetris
}