`

序列化及反序列化Dictionary

 
阅读更多

 

    #region 序列化及反序列化对象
    [Serializable]
    public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
    {

        public SerializableDictionary() { }

        public void WriteXml(XmlWriter write)
        {
            XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));

            foreach (KeyValuePair<TKey, TValue> kv in this)
            {
                write.WriteStartElement("SerializableDictionary");
                write.WriteStartElement("key");
                KeySerializer.Serialize(write, kv.Key);
                write.WriteEndElement();
                write.WriteStartElement("value");
                ValueSerializer.Serialize(write, kv.Value);
                write.WriteEndElement();
                write.WriteEndElement();
            }

        }
        public void ReadXml(XmlReader reader)
        {
            reader.Read();
            XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));

            while (reader.NodeType != XmlNodeType.EndElement)
            {
                reader.ReadStartElement("SerializableDictionary");
                reader.ReadStartElement("key");
                TKey tk = (TKey)KeySerializer.Deserialize(reader);
                reader.ReadEndElement();
                reader.ReadStartElement("value");
                TValue vl = (TValue)ValueSerializer.Deserialize(reader);
                reader.ReadEndElement();
                reader.ReadEndElement();
                this.Add(tk, vl);
                reader.MoveToContent();

            }
            reader.ReadEndElement();

        }
        public XmlSchema GetSchema()
        {
            return null;
        }
    }
    #endregion

 

分享到:
评论

相关推荐

    VB.NET XML和JSON序列化与反序列化

    在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...

    hashtable序列化与反序列化

    `HashTable`继承自`Dictionary`类,并实现了`Serializable`接口,因此它支持序列化操作。 要序列化一个`HashTable`对象,我们需要执行以下步骤: 1. 确保`HashTable`类或包含它的类实现了`Serializable`接口。例如...

    C#序列化与反序列化(包括复杂xml对象)

    方法三:取节点KV值并处理对象数组及节点标签组合反序列化 在处理更复杂的XML结构时,可能会遇到对象数组和嵌套的节点标签。例如,一个XML节点可能包含多个相同类型的子节点,这些子节点可以被反序列化为一个对象...

    Dictionary序列化源码 datatable序列化源码

    本篇将详细讲解标题和描述中提到的`Dictionary`和`DataTable`的序列化与反序列化方法。 首先,让我们了解`Dictionary, TValue&gt;`。`Dictionary`是.NET中的一个内置类,它实现了键值对的存储,通常用于创建关联数据...

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

    ReadXml方法用于从XML文件中读取数据,我们需要使用XmlSerializer来反序列化键和值。 ```csharp public void ReadXml(System.Xml.XmlReader reader) { XmlSerializer keySerializer = new XmlSerializer(typeof(T...

    JSON的序列化与反序列化

    利用JSON.NET制作的,对JSON文本进行序列化和反序列化操作的类,可反序列化成实体类或Dictionary,也可从类或Dictionary序列化成JSON文本

    序列化,反序列化,接口

    序列化和反序列化是计算机科学中的重要概念,特别是在数据存储、网络通信和对象持久化等领域。接口在编程中则扮演着定义规范和提供抽象的角色。让我们深入了解一下这些概念。 **序列化** 是将对象的状态转换为可...

    xml 和C#序列化与反序列化

    ### 示例五:序列化Dictionary 最后,我们来看一个稍微复杂的例子,即序列化一个字典: ```csharp public struct DirectionList { [XmlAttribute("Name")] public string Name; [XmlElement("Value")] public...

    unity字典序列化工具SerializableDictionary

    3. **序列化和反序列化方法**:为了配合Unity的序列化流程,`SerializableDictionary`类需要包含特殊的属性或方法,比如`[SerializeField]`标记的私有字段,以及可能的`OnBeforeSerialize()`和`OnAfterDeserialize()...

    C#自定义序列化ISerializable的实现方法

    ISerializable接口是.NET Framework提供的一种自定义序列化的方式,允许开发者精确控制对象的序列化和反序列化过程。下面我们将详细讲解如何在C#中实现自定义序列化,特别是通过ISerializable接口。 首先,让我们看...

    反射泛型序列化(.net版)PPT

    序列化是将对象的状态转换为可以存储或传输的数据格式的过程,而反序列化则是将这些数据恢复为对象。在.NET中,主要有XML序列化、BinaryFormatter和DataContractSerializer等方式。序列化的应用场景包括: 1. **...

    iOS objective-c 实体类对象的序列化为Json及反序列化

    Objective-C的实体类对象序列化和反序列化是数据处理的关键环节,它涉及到如何将内存中的对象转换为可存储或传输的数据格式,如JSON(JavaScript Object Notation),以及如何将接收到的JSON数据还原为对象。...

    C#序列化(二)二进制序列化的案例 c#经典案例.pdf

    4. 当用户在ListBox中选择一个条目时,`listBox1_SelectedValueChanged`事件处理程序读取选定文件,进行反序列化并显示在左侧: ```csharp if (listBox1.SelectedItem != null) { var FileName = listBox1....

    C#中datatable序列化与反序列化实例分析

    然而,在某些场景下,我们可能需要将 `DataTable` 对象转换为字符串(序列化)以便于传输或存储,然后再从字符串恢复(反序列化)。本篇文章将详细讲解如何在C#中实现 `DataTable` 的序列化和反序列化。 首先,让...

    c#序列化完成电影票销售系统

    这个项目对于初学者理解C#的面向对象特性非常有帮助,同时也涉及到XML文件操作、序列化与反序列化、泛型集合、类的构造、接口、抽象类、类的继承以及多态等关键知识点。 首先,**XML文件操作**是系统中数据存储和...

    C# 单文件存放多个序列化对象

    例如,可以创建一个`Dictionary, object&gt;`,其中键是对象类型或标识,值是序列化的对象。这样,当你需要反序列化时,可以根据键找到对应的对象。 然而,这种方法的缺点是,如果你有不同类型的数据,可能会导致数据...

    xml文件序列化

    6. **集合序列化**:`List&lt;T&gt;`、`Dictionary, TValue&gt;`等集合类型可以自动序列化,但也可以使用`[XmlArray]`和`[XmlArrayItem]`进行自定义。 总之,XML文件序列化是软件开发中常用的数据持久化手段,它使得对象的...

    CommonsCollection7反序列化链学习.doc

    - **Hashtable**:`Hashtable`是Java的一个类,实现了`Map`接口并继承自`Dictionary`类,同时也实现了`Serializable`接口,这意味着它可以被序列化和反序列化。与`HashMap`类似,`Hashtable`用于存储键值对,但它是...

    序列化与集合窗体应用

    在“序列化与集合窗体应用”项目中,可能涵盖了如何将集合对象(如ArrayList或Dictionary)进行序列化,然后保存到文件或数据库中。这在处理大量数据时非常有用,因为可以直接读取序列化的数据,避免了重新计算或...

    unity3d-ordered-dictionary:用于将有序字典添加到自定义`ScriptableObject`和`MonoBehaviour`类的库,只要键和值类型可序列化,可通过Unity对其进行序列化

    用于在自定义ScriptableObject和MonoBehaviour类中添加有序词典的库,只要键和值类型是可序列化的,就可以由Unity进行序列化。 $ yarn add rotorz/unity3d-ordered-dictionary 该软件包与工具兼容。 有关将程序​...

Global site tag (gtag.js) - Google Analytics