2011-12-08 10 views
1

私はC#(フレームワーク2.0)で、シリアライズ辞書を検索し、私はこの1つが見つかりました:かなりいいです、シリアライズ辞書2.0

http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

をしかし、私はそれを持ってしたいと思いますこのように私の辞書をシリアライズ:

writer.WriteStartElement("item") 
writer.WriteElementString("key", key.ToString) 
writer.WriteElementString("value", value.ToString) 
0123:

<item> 
    <key>my_first_key</key> 
    <value>my_first_value</value> 
</item> 
<item> 
    <key>my_second_key</key> 
    <value>my_second_value</value> 
</item> 

私はこのようなWriteXmlメソッドを変更してみました

それはうまく動作しますが、xml入力を辞書として非直列化するために、私はそれを動作させることはできません。私はこれを試しました:

reader.ReadStartElement("item") 

reader.ReadStartElement("key") 
Dim key As String = reader.ReadString() 

そして私は正しく、しかし、Stringオブジェクトにキーを取得します。私はこのように私のキー/値のペアを追加しようとすると:

Me.Add(key, value) 

キーは文字列ではなく処理鍵タイプですので、それは動作しません。文字列をTKeyにキャストまたは変換する方法を知っていますか?または、キー/値を文字列としてTKey/Tvalue型にカプセル化しますか?

ありがとうございます!

答えて

1

あなたの要件は文字列に非常に重点を置いていますが、提案されたコードは一般的です。しかし、あなたは、おそらく特殊な場合にこれをすることができます

reader.ReadStartElement("key"); 
if(typeof(TKey) == typeof(string)) { 
    TKey key = (TKey)(object)reader.ReadString(); 
} else {   
    TKey key = (TKey)keySerializer.Deserialize(reader); 
} 
reader.ReadEndElement(); 

(と同様の値)

と、すなわち:

writer.WriteStartElement("item") 
if(typeof(TKey) == typeof(string)) { 
    writer.WriteElementString("key", (string)(object)key); 
} else { 
    writer.WriteStartElement("key"); 
    keySerializer.Serialize(writer, key); 
    writer.WriteEndElement(); 
} 

(および値についても同様)

未テスト - しかし、仕事をする必要があります。

+0

ありがとう、これはまさに私が探したものです! – Thordax

関連する問題