我有一个类似于以下结构的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
似乎对PhantomData
一无所知,并且期望大小为4
的数组,可以通过手动实现Deserializer
来解决这个问题,而我想要避免这种情况发生。我并不抱太大希望,但也许有什么我不知道的方法。