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 件のコメント:
コメントを投稿