日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#序列化与反序列化以及深拷贝浅拷贝方法

發布時間:2023/12/18 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#序列化与反序列化以及深拷贝浅拷贝方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于二進制數據流的序列化和反序列化

/// <summary>/// 序列化/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>public static void Serialize<T>(T obj){try{using (FileStream fs = new FileStream("Serialize.bin", FileMode.OpenOrCreate)){BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fs, obj);//序列化}}catch (Exception ex){throw;}}/// <summary>/// /// </summary>/// <typeparam name="T"></typeparam>/// <returns></returns>public static T Deserialize<T>(){T res = default(T);try{using (FileStream fs=new FileStream("Serialize.bin",FileMode.Open)){BinaryFormatter bf = new BinaryFormatter();res = (T)bf.Deserialize(fs);}}catch (Exception){throw;}return res;}

此時需要序列化的對象必須要聲明為可序列化,只需要在聲明類的同時采用關鍵字Serializable,如下:

1

2

3

4

5

6

[Serializable]

public?class?Test

{

????public?string?Name {?get;?set; }

????public?int?Age {?get;?set; }

}

  以上便可以完成序列化的反序列化的操作。

基于二進制序列化的反序列化的拷貝,C#是基于面型對象的開發語言,自定義聲明的類都是采用引用傳遞的形式,有時候數據的修改對于這種引用傳遞來說并不是我們想要的結果,因此我們需要該對象的一份拷貝。

以下是基于內存序列化的一種方式:

public static T Copy<T>(T obj){if (obj == null){return default(T);}T res = default(T);using (MemoryStream ms = new MemoryStream()){BinaryFormatter bf = new BinaryFormatter();bf.Serialize(ms, obj);//序列化ms.Seek(0, SeekOrigin.Begin);res = (T)bf.Deserialize(ms);//反序列化}return res;}

這樣獲取到的拷貝對象跟原來的對象就不是指向同一個地址,這樣操作新的對象也不會影響原來的對象。

還有一種是實現ICloneable接口,在Clone方法中返回對象的一個淺拷貝MemberwiseClone。

public class CopyTest : ICloneable{public string Name { get; set; }public int Age { get; set; }public object Clone(){return this.MemberwiseClone();//獲取副本}}

通過以下方式便可以獲得對象的一個拷貝對象:

CopyTest ct = new CopyTest() { Name = "Test", Age = 99 }; CopyTest ct01 = (CopyTest)ct.Clone();

總結

以上是生活随笔為你收集整理的C#序列化与反序列化以及深拷贝浅拷贝方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。