2011年9月3日土曜日

シリアライズ可能なDictionary(C#)

Dictionaryはシリアライズできないのでシリアライズ可能なSerializableDictionaryを作る方法。

http://d.hatena.ne.jp/lord_hollow/20090206
http://d.hatena.ne.jp/lord_hollow/20090602/p1

上に書いてある方法だと、Dictionaryが空の時にエラーになるので少し手(色付け)を入れてる。
public class SerializableDictionary<Tkey, Tvalue> : Dictionary<Tkey, Tvalue>, IXmlSerializable
{
    public System.Xml.Schema.XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(System.Xml.XmlReader reader)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(KeyValue));

bool isEmpty = reader.IsEmptyElement; reader.Read(); if (isEmpty) { return; }
while (reader.NodeType != System.Xml.XmlNodeType.EndElement) { KeyValue kv = serializer.Deserialize(reader) as KeyValue; if (kv != null) Add(kv.Key, kv.Value); } reader.Read(); } public void WriteXml(System.Xml.XmlWriter writer) { XmlSerializer serializer = new XmlSerializer(typeof(KeyValue)); foreach (var key in Keys) { serializer.Serialize(writer, new KeyValue(key, this[key])); } } public class KeyValue { public KeyValue() { } public KeyValue(Tkey key, Tvalue value) { Key = key; Value = value; } public Tkey Key { get; set; } public Tvalue Value { get; set; } } }

0 件のコメント:

コメントを投稿