2009-09-01 18 views
4

IDictionaryを実装するオブジェクトをシリアル化する創造的な方法を知っている人はいますか? ...新しいクラスを実装せずに?IDictionary

答えて

11

IDictionaryを実装するクラスは、シリアライズ(Dictionary<K,V>など)KVある場合は、その後、標準の.NETシリアル化メカニズムが動作する必要がシリアライズされています。

IDictionaryを実装するクラスは直列化可能ですが、KVは、あなたが個別にキーと関連する値をシリアル化するために2つの配列を使用することができている場合:

// before serialization 
IDictionary<string,int> dict; 
string[] keys = dict.Keys.ToArray(); 
int[] values = dict.Keys.Select(key => dict[key]).ToArray(); 

// after deserialization 
IDictionary<string,int> dict = new Dictionary<string,int>(); 
for (int i = 0; i < keys.Length; i++) 
    dict.Add(keys[i], values[i]); 
+0

私はこのクラスにいるクレイジーアクセサのため、私はこの特定のソリューションを実装することができませんでしたが、これは私が探していた創造的なソリューションのタイプでしたので、これを答えとしてマークします。ありがとう! –

1

私はあなたがいた辞書をシリアル化する必要がある意味それを取りますクラスの一部にはコントロールがありませんか?

つまり、キーと値を別々にシリアル化する必要があります。デシリアライズするには、キー/値配列内の各項目をステップして辞書に追加し直します。

0

あなたがDeserializeSerializeを行うだろうと同じようReadObjectWriteObjectで、System.Runtime.Serialization.DataContractSerializerを使用することができます。 それは魅力のように機能します。

+0

インラインでシリアライズ/デシリアライズしますか?つまり、主なシリアル化はxmlですが、問題の原因となっているIDictionaryプロパティだけを注入できますか? – toddmo

関連する問題