日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#中自定義集合的序列化與反序列化實(shí)現(xiàn)

admin
2025年1月8日 10:2 本文熱度 589

在C#中,可以通過(guò)實(shí)現(xiàn)自定義集合的序列化和反序列化來(lái)保存和加載集合數(shù)據(jù)。這通常涉及到實(shí)現(xiàn) ISerializable 接口或使用數(shù)據(jù)契約(Data Contract)序列化。下面我將展示這兩種方法。

方法一:使用 ISerializable 接口

  1. 定義自定義集合類(lèi):首先需要定義一個(gè)自定義集合類(lèi),比如一個(gè)基于 List<T> 的類(lèi)。

  2. 實(shí)現(xiàn) ISerializable 接口:然后需要實(shí)現(xiàn) ISerializable 接口,包括一個(gè)構(gòu)造函數(shù)和 GetObjectData 方法。

  3. 序列化和反序列化:編寫(xiě)序列化和反序列化的方法。

以下是一個(gè)示例:

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{    // 序列化構(gòu)造函數(shù)    protected MyCustomCollection(SerializationInfo info, StreamingContext context)    {        // 從序列化信息中恢復(fù)數(shù)據(jù)        var items = (T[])info.GetValue("Items", typeof(T[]));        AddRange(items);    }
    // 實(shí)現(xiàn) ISerializable 接口的 GetObjectData 方法    public void GetObjectData(SerializationInfo info, StreamingContext context)    {        // 將數(shù)據(jù)添加到序列化信息中        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 序列化可以更方便地處理復(fù)雜對(duì)象和集合,并且不需要實(shí)現(xiàn) ISerializable 接口。

  1. 定義自定義集合類(lèi):定義一個(gè)自定義集合類(lèi)。

  2. 應(yīng)用 Data Contract 屬性:在類(lèi)和成員上應(yīng)用 DataContract 和 DataMember 屬性。

  3. 序列化和反序列化:使用 DataContractSerializer 類(lèi)進(jìn)行序列化和反序列化。

以下是一個(gè)示例:

using System;using System.Collections.Generic;using System.IO;using System.Runtime.Serialization;
[DataContract]public class MyCustomCollection<T> : List<T>{    // 因?yàn)?List<T> 已經(jīng)包含 DataMember 屬性,這里不需要額外定義    // 可以添加額外的自定義屬性并標(biāo)記為 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; // 重置流位置到開(kāi)頭            var deserializedCollection = (MyCustomCollection<int>)serializer.ReadObject(ms);
            // 輸出反序列化后的集合            foreach (var item in deserializedCollection)            {                Console.WriteLine(item);            }        }    }}


該文章在 2025/1/8 10:02:55 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 亚洲人成在线不卡网 | 日本一本二本三区免费2025高 | 日韩欧美卡一卡二卡新区 | 亚洲国产精品第一区二区三区 | 免费人成黄页网站大全在线观 | 国产私拍福利精品视频推出 | 两性色午夜视频在线观看 | 中文字幕人成人乱码亚洲影 | 国产99视频精品专区 | 2025最新国 | 精品91自产拍 | 日韩欧美亚洲一区二区综合 | 国产日产高清欧美一区二区三区 | 亚洲风情亚aⅴ在线发布 | 欧亚乱色熟一区二区三四区 | 国产精品亚洲二区在线看 | 亚洲中文字幕第一页在线 | 国产欧美一区二区三区在线看 | 无毒不卡在线观看无需下载 | 免费精品国偷自产在线青年 | 亚洲精品揄拍自拍首页一 | 国产精品视 | 日本在线高清不卡免费播放 | 亚洲mv大片欧洲mv大片入口 | 亚洲午夜福利院在线 | 婷婷四房综合激情五月在线 | 在线观看精品日韩视频 | 日韩欧美国产免费看清风阁 | 国产精品美 | 日本二区 | 日韩国产在线观看第1页 | 性xxxx18免| 在线看片国产日韩欧美亚洲 | 成人午夜污污在线观看网站 | 九九精品99久 | 乱码精品一区二区三区四川人 | 欧美亚洲高清国产一区二区三区 | 在线播放亚洲综合 | 国产乱子伦农村叉叉叉 | 污污污国| 欧美a一级在线观看 |