3

我正在解析一个使用整数作为枚举数的 INI 样式文件。

#[derive(Debug, Deserialize, Serialize)]
pub enum MyThing {
    First = 0,
    Second = 1,
    Third = 2,
}

在文件中,值将像这样被序列化:

thing=0

但是,默认情况下,Serde 匹配变体名称而不是判别式。自定义实现Deserialize是最干净的方法吗?

4

1 回答 1

3

Serde 网站上有一个完整的示例,说明如何将枚举序列化为数字

[dependencies]
serde = "1.0"
serde_repr = "0.1"
use serde_repr::*;

#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
enum SmallPrime {
    Two = 2,
    Three = 3,
    Five = 5,
    Seven = 7,
}

fn main() {
    use SmallPrime::*;
    let nums = vec![Two, Three, Five, Seven];

    // Prints [2,3,5,7]
    println!("{}", serde_json::to_string(&nums).unwrap());

    assert_eq!(Two, serde_json::from_str("2").unwrap());
}

我相信这是最好的方法,因为它是由 crate 作者自己推荐的。

于 2018-04-02T01:25:01.123 回答