Dictionaryプロローグと反プロローグ

10339 ワード

[回転:http://blog.csdn.net/woaixiaozhe/article/details/7873582」
1.説明:Dictionaryオブジェクト自体は、序文化と逆順序化をサポートしていません.DictionaryからIXml Serialzable類を継承するカスタムクラスを定義して、この機能を実現する必要があります.このような種類をC龛庫に入れることができるという感覚があります.通用性があります.今まで使えない状況に遭遇したことがないです.他の面からmicrosoffはそうしていないかもしれません.
2.Serializable Dictionaryカスタムクラス
 1     [Serializable]
 2     public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
 3     {
 4         public SerializableDictionary() { }
 5         public void WriteXml(XmlWriter write)       // Serializer
 6         {
 7             XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
 8             XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));
 9 
10             foreach (KeyValuePair<TKey, TValue> kv in this)
11             {
12                 write.WriteStartElement("SerializableDictionary");
13                 write.WriteStartElement("key");
14                 KeySerializer.Serialize(write, kv.Key);
15                 write.WriteEndElement();
16                 write.WriteStartElement("value");
17                 ValueSerializer.Serialize(write, kv.Value);
18                 write.WriteEndElement();
19                 write.WriteEndElement();
20             }
21         }
22         public void ReadXml(XmlReader reader)       // Deserializer
23         {
24             reader.Read();
25             XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
26             XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));
27 
28             while (reader.NodeType != XmlNodeType.EndElement)
29             {
30                 reader.ReadStartElement("SerializableDictionary");
31                 reader.ReadStartElement("key");
32                 TKey tk = (TKey)KeySerializer.Deserialize(reader);
33                 reader.ReadEndElement();
34                 reader.ReadStartElement("value");
35                 TValue vl = (TValue)ValueSerializer.Deserialize(reader);
36                 reader.ReadEndElement();
37                 reader.ReadEndElement();
38                 this.Add(tk, vl);
39                 reader.MoveToContent();
40             }
41             reader.ReadEndElement();
42 
43         }
44         public XmlSchema GetSchema()
45         {
46             return null;
47         }
48     }
3.使用
  a.Serializable Dictioryオブジェクトを定義し、ここでは「string、string」キーペアを記憶することを例にしている:
1 SerializableDictionary<string, string> serializableDictionary = new SerializableDictionary<string, string>();  
b.要素を追加する
1 serializableDictionary.Add("Key1", “Value1”);  
c.プロローグ
1 using (FileStream fileStream = new FileStream(fileName, FileMode.Create))  
2 {  
3     XmlSerializer xmlFormatter = new XmlSerializer(typeof(SerializableDictionary<string, string>));  
4     xmlFormatter.Serialize(fileStream, this.serializableDictionary);  
5 }  
 注:ファイル名はfile.xmlのように自分で定義します.
d.アンチプログレッシブ
1 using (FileStream fileStream = new FileStream(fileName, FileMode.Open))  
2 {  
3     XmlSerializer xmlFormatter = new XmlSerializer(typeof(SerializableDictionary<string, string>));  
4     this.serializableDictionary = (SerializableDictionary<string,string>)xmlFormatter.Deserialize(fileStream);  
5 }