zoukankan      html  css  js  c++  java
  • XML Serializable Generic Dictionary

    参考地址:http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
    简述:默认情况下,Dictionary是不支持XML序列化的,为了达到这个目的,我们需要自定义一个类型来做
     
    For some reason, the generic Dictionary in .net 2.0 is not XML serializable.  
    The following code snippet is a xml serializable generic dictionary.  
    The dictionary is serialzable by implementing the IXmlSerializable interface
        using System;
        using System.Collections.Generic;
        using System.Text;
        using System.Xml.Serialization;
     
        [XmlRoot("dictionary")]
        public class SerializableDictionary<TKey, TValue>
            : Dictionary<TKey, TValue>, IXmlSerializable
        {
            #region IXmlSerializable Members
            public System.Xml.Schema.XmlSchema GetSchema()
            {
                return null;
            }
     
            public void ReadXml(System.Xml.XmlReader reader)
            {
                XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
                XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
     
                bool wasEmpty = reader.IsEmptyElement;
                reader.Read();
     
                if (wasEmpty)
                    return;
     
                while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
                {
                    reader.ReadStartElement("item");
     
                    reader.ReadStartElement("key");
                    TKey key = (TKey)keySerializer.Deserialize(reader);
                    reader.ReadEndElement();
     
                    reader.ReadStartElement("value");
                    TValue value = (TValue)valueSerializer.Deserialize(reader);
                    reader.ReadEndElement();
     
                    this.Add(key, value);
     
                    reader.ReadEndElement();
                    reader.MoveToContent();
                }
                reader.ReadEndElement();
            }
     
            public void WriteXml(System.Xml.XmlWriter writer)
            {
                XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
                XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
     
                foreach (TKey key in this.Keys)
                {
                    writer.WriteStartElement("item");
     
                    writer.WriteStartElement("key");
                    keySerializer.Serialize(writer, key);
                    writer.WriteEndElement();
     
                    writer.WriteStartElement("value");
                    TValue value = this[key];
                    valueSerializer.Serialize(writer, value);
                    writer.WriteEndElement();
     
                    writer.WriteEndElement();
                }
            }
            #endregion
        }
    Update:
  • 相关阅读:
    你拿什么保护我的版权(写在中移动MM商用之前)
    体验Windows Mobile 6.5 (模拟器)
    Mobile Market试用后感受
    制作Windows Mobile程序安装包
    自定义.NET CF控件,美化Windows Mobile程序界面
    记《虞美人盛开的山坡》
    剑风传奇 黄金时代篇1:霸王之卵
    发现IGame中又一个大坑
    【翻译】【西川善司】3D图形的概念和渲染管线(5回完)
    【翻译】西川善司为了3D游戏粉丝的[生化危机5]图形讲座(后篇)
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1741453.html
Copyright © 2011-2022 走看看