LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#中自定义集合的序列化与反序列化实现

admin
2025年1月8日 10:2 本文热度 52

在C#中,可以通过实现自定义集合的序列化和反序列化来保存和加载集合数据。这通常涉及到实现 ISerializable 接口或使用数据契约(Data Contract)序列化。下面我将展示这两种方法。

方法一:使用 ISerializable 接口

  1. 定义自定义集合类:首先需要定义一个自定义集合类,比如一个基于 List<T> 的类。

  2. 实现 ISerializable 接口:然后需要实现 ISerializable 接口,包括一个构造函数和 GetObjectData 方法。

  3. 序列化和反序列化:编写序列化和反序列化的方法。

以下是一个示例:

using System;using System.Collections.Generic;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;
[Serializable]public class MyCustomCollection<T> : List<T>, ISerializable{    // 序列化构造函数    protected MyCustomCollection(SerializationInfo info, StreamingContext context)    {        // 从序列化信息中恢复数据        var items = (T[])info.GetValue("Items", typeof(T[]));        AddRange(items);    }
    // 实现 ISerializable 接口的 GetObjectData 方法    public void GetObjectData(SerializationInfo info, StreamingContext context)    {        // 将数据添加到序列化信息中        info.AddValue("Items", ToArray());    }
    // 序列化方法    public byte[] Serialize()    {        using (var ms = new MemoryStream())        {            var formatter = new BinaryFormatter();            formatter.Serialize(ms, this);            return ms.ToArray();        }    }
    // 反序列化方法    public static MyCustomCollection<T> Deserialize(byte[] data)    {        using (var ms = new MemoryStream(data))        {            var formatter = new BinaryFormatter();            return (MyCustomCollection<T>)formatter.Deserialize(ms);        }    }}
// 使用示例class Program{    static void Main()    {        var collection = new MyCustomCollection<int> { 1, 2, 3, 4, 5 };
        // 序列化        byte[] serializedData = collection.Serialize();
        // 反序列化        var deserializedCollection = MyCustomCollection<int>.Deserialize(serializedData);
        // 输出反序列化后的集合        foreach (var item in deserializedCollection)        {            Console.WriteLine(item);        }    }}

方法二:使用 Data Contract 序列化

使用 Data Contract 序列化可以更方便地处理复杂对象和集合,并且不需要实现 ISerializable 接口。

  1. 定义自定义集合类:定义一个自定义集合类。

  2. 应用 Data Contract 属性:在类和成员上应用 DataContract 和 DataMember 属性。

  3. 序列化和反序列化:使用 DataContractSerializer 类进行序列化和反序列化。

以下是一个示例:

using System;using System.Collections.Generic;using System.IO;using System.Runtime.Serialization;
[DataContract]public class MyCustomCollection<T> : List<T>{    // 因为 List<T> 已经包含 DataMember 属性,这里不需要额外定义    // 可以添加额外的自定义属性并标记为 DataMember}
// 使用示例class Program{    static void Main()    {        var collection = new MyCustomCollection<int> { 1, 2, 3, 4, 5 };
        // 序列化        using (var ms = new MemoryStream())        {            var serializer = new DataContractSerializer(typeof(MyCustomCollection<int>));            serializer.WriteObject(ms, collection);            byte[] serializedData = ms.ToArray();
            // 反序列化            ms.Position = 0; // 重置流位置到开头            var deserializedCollection = (MyCustomCollection<int>)serializer.ReadObject(ms);
            // 输出反序列化后的集合            foreach (var item in deserializedCollection)            {                Console.WriteLine(item);            }        }    }}


该文章在 2025/1/8 10:02:55 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved