• C#自定义可序列化的Dictionary类型


     自定义可序列化的Dictionary类型。 

     转自外国网站的,做下标记。哈哈。。。。

    引自:http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx 

    XML Serializable Generic Dictionary

    XML Serializable Generic Dictionary

    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

        }

  • 相关阅读:
    加油站
    UIScrollView控件实现图片轮播
    键值编码 KVC
    键值观察 KVO
    弹出视图集合
    关于Page翻页效果, PageViewConrtoller
    Event Handling Guide for iOS--事件驱动指南
    远程控制
    耳机线控
    ASI框架的使用
  • 原文地址:https://www.cnblogs.com/strayromeo/p/2395429.html
Copyright © 2020-2023  润新知