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

        }

  • 相关阅读:
    计算机网络 实验之 面向连接和无连接的套接字到底有什么区别?
    计算机网络 实验之 Internet 套接字
    计算机网络 实验之 socket是什么?套接字是什么?
    PepperLa's Boast(单调队列优化二维dp)
    理想的正方形(单调队列在二维的应用)
    移相器以及相控阵雷达移相器位数的选择
    盲速和频闪——雷达
    多普勒效应----雷达
    线性调频(LFM)脉冲压缩-----------雷达
    雷达----脉冲压缩
  • 原文地址:https://www.cnblogs.com/strayromeo/p/2395429.html
Copyright © 2011-2022 走看看