Dictionaryプロローグと反プロローグ
10339 ワード
[回転:http://blog.csdn.net/woaixiaozhe/article/details/7873582」
1.説明:Dictionaryオブジェクト自体は、序文化と逆順序化をサポートしていません.DictionaryからIXml Serialzable類を継承するカスタムクラスを定義して、この機能を実現する必要があります.このような種類をC龛庫に入れることができるという感覚があります.通用性があります.今まで使えない状況に遭遇したことがないです.他の面からmicrosoffはそうしていないかもしれません.
2.Serializable Dictionaryカスタムクラス
a.Serializable Dictioryオブジェクトを定義し、ここでは「string、string」キーペアを記憶することを例にしている:
d.アンチプログレッシブ
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 }