0

複雑ではないが、自然な JSON 表現を持たない型のカスタム シリアライザーとデリアライザーを作成しようとしています。

pub type ArrayKey = [i16; 5];

pub struct ArrayKeyedMap {
    the_map: HashMap<ArrayKey, u32>
}

配列キーを持つ HashMap は、JSON マップ (文字列キーを持つ必要があります) として表すことはできません。だから私はペアのシーケンスとしてそれをシリアライズしたい. シーケンスのシリアル化のドキュメントは非常に明確で、次のように機能します。

impl Serialize for ArrayKeyedMap {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
        where
            S: Serializer,
    {
        let mut seq = serializer.serialize_seq(Some(self.the_map.len()))?;
        for (the_key, the_val) in self.the_map.iter() {
            seq.serialize_element(the_key)?;
            seq.serialize_element(the_val)?;
        }
        seq.end()
    }
}

これは、eg としてシリアル化され[[1,2,3,4,5], 1, [5,4,3,2,1], 2]ます。シーケンスのデシリアライゼーションに関するドキュメントは、従うのがそれほど簡単ではなく、ビジターとSeqDeserializer. 何かを渡すつもりなのか、戻り値を取得するつもりなのか、それとも何か他のことなのかわかりません。

impl<'de> Deserialize<'de> for ArrayKeyedMap
{
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
        where
            D: Deserializer<'de>,
    {
        deserializer.deserialize_seq(SeqDeserializer::new // not sure how to proceed
    }
}

これを配列キーを使用してマップに逆シリアル化するにはどうすればよいですか?

4

1 に答える 1