Cou*_*ero 3 rust serde bincode
我有一个像这样的枚举:
#[derive(Debug, Deserialize, Serialize)]
enum E {
A(i32),
#[serde(skip)]
B(bool),
C(char),
D(Vec<i32>),
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用bincode crate执行以下操作:
fn main() {
let data = E::C('A');
let encoded = bincode::serialize(&data).unwrap();
let decoded = bincode::deserialize::<E>(&encoded).unwrap();
println!("{:?}", decoded);
}
Run Code Online (Sandbox Code Playgroud)
然而,这会引发以下消息:
Run Code Online (Sandbox Code Playgroud)#[derive(Debug, Deserialize, Serialize)] enum E { A(i32), #[serde(skip)] B(bool), C(char), D(Vec<i32>), }
我注意到,如果满足以下条件之一,则一切正常:
#[serde(skip)]
属性我还了解 bincode 以某种方式忽略#[serde(skip)]
并尝试反序列encoded
化为E::D(Vec<i32>)
. 如果我更改Vec<i32>
为char
它会起作用,但decoded
会E::D('A')
(而不是E::C('A')
)。
我错过了什么还是 bincode 箱中的错误?
目前看来,使用 跳过字段serde
对于非自描述格式(如bincode
. 关于此有几个未解决的问题:
skip_serializing_if
serde
是GitHub 存储库上的一把枪。skip_deserializing
变体属性bincode
在的 GitHub 存储库上具有令人困惑的行为。 归档时间: |
|
查看次数: |
993 次 |
最近记录: |