【发布时间】:2020-01-14 03:31:01
【问题描述】:
在 Rust 中,我从 websocket 接收数据。为简单起见,它看起来像这样:
[1, {"a": ["1.2345", 5, "9.8765"]}]
我从 websocket 得到的字符串确实是双引号的“浮点值”(因此实际上是字符串)和不带引号的整数。
我想将此对象反序列化为一个结构。但由于返回数组“a”是混合类型,我不能使用类似的东西:
struct MyStruct {
id: i32,
a: [f64; 3],
}
所以我想让我们定义另一个结构:
struct Ask {
price: f64,
whole_lot_volume: i64,
lot_volume: f64
}
struct MyStruct {
id: i32,
a: Ask
}
但是我应该如何为此编写反序列化程序?查看serde 文档,我知道我应该为Ask 写一个Visitor:
impl<'de> Visitor<'de> for Ask {
type Value = ...
}
那么Value 类型会是什么呢?
所以我确定我没有正确理解反序列化过程的工作原理。还是 Websocket 返回的混合类型数组与 serde 反序列化过程不兼容?
【问题讨论】: