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

        }

  • 相关阅读:
    sql查询
    PHP常用的设计模式
    PHP内存管理和垃圾回收机制
    记一次面试
    获取py文件函数名及动态调用
    正确解决 mysql 导出文件 分隔符 问题
    解决ValueError: cannot convert float NaN to integer
    Python ---接口返回值中文编码问题
    pandas python 读取大文件
    【neo4J】后台关闭后,前端还能打开视图
  • 原文地址:https://www.cnblogs.com/strayromeo/p/2395429.html
Copyright © 2011-2022 走看看