zoukankan      html  css  js  c++  java
  • 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

        }

  • 相关阅读:
    具体讲解有关“DB2“数据库的一些小材干1
    适用手段 Ubuntu Linux 8.04设置与优化2
    如何管理DB2数据库代码页不兼容的成效
    具体解说有关“DB2“数据库的一些小本领3
    深化分析DB2数据库运用体系的性能优化3
    实例讲解如安在DB2 UDB中正确的监控弃世锁2
    阅历总结:运用IBM DB2数据库的详细事变
    实例讲授如何在DB2 UDB中正确的监控死锁3
    DB2数据库在AIX上若何卸载并重新安顿
    轻松处置DB2创设存储历程时碰着的错误
  • 原文地址:https://www.cnblogs.com/strayromeo/p/2395429.html
Copyright © 2011-2022 走看看