我的 JSON 看起来像:
[{"range": [1, 2]}, {"range": [2, 5]}]
数组中的对象当然有其他字段range
,但这没关系。
是否可以将它们反序列化为具有两种幻像类型的元组,以自动指示开始和结束是包含还是不包含?
这也可以通过将数字反序列化为某种具有幻像类型的元组来解决。
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
use std::marker::PhantomData;
#[derive(Debug)]
struct Inclusive;
#[derive(Debug)]
struct Exclusive;
#[derive(Deserialize)]
struct Range<S, E, V: Ord>(Option<V>, Option<V>, PhantomData<S>, PhantomData<E>);
fn main() {
let data = "[1, 2]";
let r: Range<Inclusive, Exclusive, i32> = serde_json::from_str(data).expect("Error");
println!("Range from {:?} to {:?}", r.0, r.1);
}
这不起作用,因为serde_json
似乎对 size 数组一无所知PhantomData
并期望数组4
,这可以通过Deserializer
手动实现来解决,这正是我想要避免的事情。
我没有寄予厚望,但也许这可以做到,我不知道。