亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#中的序列化與反序列化方式

 更新時間:2024年12月16日 16:15:18   作者:呆呆小雅  
本文介紹了C#中的序列化和反序列化概念、目的及其在不同場景中的應用,文章詳細講解了二進制序列化、XML序列化和JSON序列化的方法和特點,并提供了一些示例代碼

前言

在 C# 編程中,序列化和反序列化是非常重要的概念。

序列化是將對象轉換為可以存儲或傳輸的格式的過程,而反序列化則是將存儲或傳輸的格式轉換回對象的過程。

這兩個過程在許多應用場景中都非常有用,例如保存對象狀態(tài)、在網絡上傳輸對象、在不同的應用程序之間共享數據等。

一、序列化的概念和目的

1. 概念

序列化是將對象的狀態(tài)轉換為可以存儲或傳輸的格式的過程。

在 C# 中,可以使用多種方式進行序列化,例如使用二進制序列化、XML 序列化或 JSON 序列化等。

2. 目的

  • 數據存儲: 將對象的狀態(tài)保存到文件、數據庫或其他存儲介質中,以便在以后需要時可以重新加載并恢復對象的狀態(tài)。
  • 網絡傳輸: 將對象的狀態(tài)通過網絡發(fā)送到其他計算機或設備上,以便在接收端可以重新創(chuàng)建對象并恢復其狀態(tài)。
  • 數據共享: 在不同的應用程序之間共享對象的狀態(tài),以便可以在不同的環(huán)境中使用相同的數據。

二、反序列化的概念和目的

1. 概念

反序列化是將存儲或傳輸的格式轉換回對象的過程。

在 C# 中,可以使用與序列化相同的方式進行反序列化,例如使用二進制序列化、XML 序列化或 JSON 序列化等。

2. 目的

  • 數據恢復: 從存儲介質中讀取序列化的數據,并將其轉換回對象的狀態(tài),以便可以繼續(xù)使用對象。
  • 網絡接收: 接收通過網絡發(fā)送的序列化數據,并將其轉換回對象的狀態(tài),以便可以在本地處理對象。
  • 數據共享: 從其他應用程序接收到共享的序列化數據,并將其轉換回對象的狀態(tài),以便可以在本地使用相同的數據。

三、C# 中的序列化方法

1. 二進制序列化

使用方法:使用BinaryFormatter類進行二進制序列化。

首先,需要在代碼中引入System.Runtime.Serialization.Formatters.Binary命名空間。

然后,可以創(chuàng)建一個BinaryFormatter對象,并使用Serialize方法將對象序列化為字節(jié)流,使用Deserialize方法將字節(jié)流反序列化為對象。

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個要序列化的對象
        MyClass obj = new MyClass { Name = "John", Age = 30 };

        // 使用二進制序列化將對象序列化為字節(jié)流
        using (MemoryStream stream = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, obj);

            // 將字節(jié)流轉換為字節(jié)數組
            byte[] data = stream.ToArray();

            // 使用二進制反序列化將字節(jié)數組反序列化為對象
            using (MemoryStream stream2 = new MemoryStream(data))
            {
                BinaryFormatter formatter2 = new BinaryFormatter();
                MyClass deserializedObj = (MyClass)formatter2.Deserialize(stream2);

                Console.WriteLine(deserializedObj.Name);
                Console.WriteLine(deserializedObj.Age);
            }
        }
    }
}

[Serializable]
class MyClass
{
    public string Name { get; set; }
    public int Age { get; set; }
}

特點:

  • 二進制序列化是一種高效的序列化方式,可以快速地將對象序列化為字節(jié)流,并在需要時快速地將字節(jié)流反序列化為對象。
  • 二進制序列化生成的字節(jié)流是緊湊的,占用的存儲空間較小。
  • 二進制序列化是一種私有序列化方式,只有使用相同的程序集和類型定義才能進行反序列化。

2. XML 序列化

使用方法:使用XmlSerializer類進行 XML 序列化。

首先,需要在代碼中引入System.Xml.Serialization命名空間。

然后,可以創(chuàng)建一個XmlSerializer對象,并使用Serialize方法將對象序列化為 XML 文檔,使用Deserialize方法將 XML 文檔反序列化為對象。

using System.IO;
using System.Xml.Serialization;

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個要序列化的對象
        MyClass obj = new MyClass { Name = "John", Age = 30 };

        // 使用 XML 序列化將對象序列化為 XML 文檔
        using (StringWriter writer = new StringWriter())
        {
            XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
            serializer.Serialize(writer, obj);

            string xml = writer.ToString();

            // 使用 XML 反序列化將 XML 文檔反序列化為對象
            using (StringReader reader = new StringReader(xml))
            {
                XmlSerializer serializer2 = new XmlSerializer(typeof(MyClass));
                MyClass deserializedObj = (MyClass)serializer2.Deserialize(reader);

                Console.WriteLine(deserializedObj.Name);
                Console.WriteLine(deserializedObj.Age);
            }
        }
    }
}

[Serializable]
[XmlRoot("MyClass")]
class MyClass
{
    public string Name { get; set; }
    public int Age { get; set; }
}

特點:  

  • XML 序列化生成的 XML 文檔是一種人類可讀的格式,可以方便地進行查看和編輯。
  • XML 序列化是一種公開的序列化方式,可以在不同的平臺和編程語言之間進行數據交換。
  • XML 序列化生成的 XML 文檔通常比二進制序列化生成的字節(jié)流占用更多的存儲空間。

3. JSON 序列化

使用方法:使用JsonSerializer類進行 JSON 序列化。

首先,需要在代碼中引入System.Text.Json命名空間。

然后,可以創(chuàng)建一個JsonSerializerOptions對象,并設置序列化選項,例如縮進格式、屬性名稱大小寫等。

最后,可以使用JsonSerializer.Serialize方法將對象序列化為 JSON 字符串,使用JsonSerializer.Deserialize方法將 JSON 字符串反序列化為對象。

using System.Text.Json;

class Program
{
    static void Main()
    {
        // 創(chuàng)建一個要序列化的對象
        MyClass obj = new MyClass { Name = "John", Age = 30 };

        // 使用 JSON 序列化將對象序列化為 JSON 字符串
        string json = JsonSerializer.Serialize(obj);

        // 使用 JSON 反序列化將 JSON 字符串反序列化為對象
        MyClass deserializedObj = JsonSerializer.Deserialize<MyClass>(json);

        Console.WriteLine(deserializedObj.Name);
        Console.WriteLine(deserializedObj.Age);
    }
}

class MyClass
{
    public string Name { get; set; }
    public int Age { get; set; }
}

特點:

  • JSON 序列化生成的 JSON 字符串是一種輕量級的數據交換格式,占用的存儲空間較小,并且易于在不同的平臺和編程語言之間進行數據交換。
  • JSON 序列化是一種人類可讀的格式,可以方便地進行查看和編輯。
  • JSON 序列化可以使用第三方庫進行擴展,例如 Newtonsoft.Json,提供更多的功能和選項。

四、總結

序列化和反序列化是 C# 編程中非常重要的概念,可以方便地進行數據存儲、網絡傳輸和數據共享等操作。

在 C# 中,可以使用二進制序列化、XML 序列化和 JSON 序列化等方式進行序列化和反序列化。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C# yield關鍵字詳解

    C# yield關鍵字詳解

    這篇文章主要介紹了C# yield關鍵字詳解,本文講解了yield是一個語法糖、語法糖的實現(實現IEnumerable<T>接口的類)、yield使用中的特殊情況等內容,需要的朋友可以參考下
    2015-04-04
  • WPF實現類似360安全衛(wèi)士界面的程序源碼分享

    WPF實現類似360安全衛(wèi)士界面的程序源碼分享

    最近在網上看到了新版的360安全衛(wèi)士,感覺界面還不錯,于是用WPF制作了一個,時間有限,一些具體的控件沒有制作,用圖片代替了。感興趣的朋友一起跟著小編學習WPF實現類似360安全衛(wèi)士界面的程序源碼分享
    2015-09-09
  • 獲取字符串中的漢字拼音首字母

    獲取字符串中的漢字拼音首字母

    獲取字符串中的漢字拼音首字母...
    2007-03-03
  • C# 批量生成隨機密碼必須包含數字和字母并用加密算法加密

    C# 批量生成隨機密碼必須包含數字和字母并用加密算法加密

    這篇文章主要介紹了C# 批量生成隨機密碼必須包含數字和字母并用加密算法加密,需要的朋友參考下
    2017-01-01
  • C#實現語音播報功能

    C#實現語音播報功能

    這篇文章主要為大家詳細介紹了C#實現語音播報功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C#通過反射創(chuàng)建自定義泛型

    C#通過反射創(chuàng)建自定義泛型

    這篇文章主要介紹了C#通過反射創(chuàng)建自定義泛型的方法,需要的朋友可以參考下
    2014-08-08
  • 詳解C# 泛型中的數據類型判定與轉換

    詳解C# 泛型中的數據類型判定與轉換

    這篇文章主要介紹了C# 泛型中的數據類型判定與轉換,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#實現簡單的loading提示控件實例代碼

    C#實現簡單的loading提示控件實例代碼

    本文通過實例代碼給大家介紹了C#實現簡單的loading提示控件功能,代碼非常簡單,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • C# List實現行轉列的通用方案

    C# List實現行轉列的通用方案

    本篇通過行轉列引出了System.Linq.Dynamic,并且介紹了過濾功能,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • C#實現簡易點餐功能

    C#實現簡易點餐功能

    這篇文章主要為大家詳細介紹了C#實現簡易點餐功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論