在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反序列化过程不兼容?