最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?二進(jìn)制序列化和反序列化的具體實現(xiàn)

 更新時間:2023年06月14日 09:34:50   作者:^@^lemon?tea^@^  
本文主要介紹了C#?二進(jìn)制序列化和反序列化的具體實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

.NET框架提供了兩種種串行化的方式:

1、是使用BinaryFormatter進(jìn)行串行化;

2、使用XmlSerializer進(jìn)行串行化。

第一種方式提供了一個簡單的二進(jìn)制數(shù)據(jù)流以及某些附加的類型信息,而第二種將數(shù)據(jù)流格式化為XML存儲??梢允褂肹Serializable]屬性將類標(biāo)志為可序列化的。如果某個類的元素不想被序列化,1、可以使用[NonSerialized]屬性來標(biāo)志,2、可以使用[XmlIgnore]來標(biāo)志。

序列化意思指的是把對象的當(dāng)前狀態(tài)進(jìn)行持久化,一個對象的狀態(tài)在面向?qū)ο蟮某绦蛑惺怯蓪傩员硎镜?,所以序列化類的時候是從屬性讀取值以某種格式保存下來,而類的成員函數(shù)不會被序列化,.net存在幾種默認(rèn)提供的序列化,二進(jìn)制序列化,xml和json序列化會序列化所有的實例共有屬性。

這里簡單介紹:BinaryFormatter以二進(jìn)制格式序列化和反序列化對象。

BinaryFormatte序列化:將對象轉(zhuǎn)化成二進(jìn)制,BinaryFormatte反序列化就是將二進(jìn)制轉(zhuǎn)化為對象;

命名空間: System.Runtime.Serialization.Formatters;

最常用的兩個方法:

  • Deserialize(Stream)     將指定的流反序列化成對象
  • Serialize(Stream, Object)     將對象序列化到給定的流

兩個常用的屬性:

  • Serializable     表示可以被序列化
  • NonSerializable     屏蔽被序列化

 簡單示例:

namespace Model
{
? ? [Serializable]
? ?public class Config
? ?{ ? ?
? ? ? ?[NonSerialized] ?// 表示下面這個age字段不進(jìn)行序列化
? ? ? ?private int age{ get; set; }
? ? ? ?public string Language { get; set; }
? ? ? ?public bool IsAutoBackup { get; set; }
? ? ? ?public int BackupTimeForHour { get; set; }
? ? ? ?public string LastTimeRestoreDBFile { get; set; }
? ? ? ?public DateTime? LastAutoBackupDateTime { get; set;}
? ? ? ?public bool IsSupportHis { get; set; }
? ? ? ?//序列化 fileName:文件地址
? ? ? ?public void SaveTo(string fileName)
? ? ? ?{
? ? ? ? ? ?using (MemoryStream ms = new MemoryStream())
? ? ? ? ? ?{
? ? ? ? ? ? ? ?BinaryFormatter formatter = new BinaryFormatter();
? ? ? ? ? ? ? ?formatter.Serialize(ms, this);
? ? ? ? ? ? ? ?File.WriteAllBytes(fileName, ms.ToArray());
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?//反序列化
? ? ? ?public static DSConfig LoadFromFile(string fileName)
? ? ? ?{
? ? ? ? ? ?try
? ? ? ? ? ?{
? ? ? ? ? ? ? ?if (!File.Exists(fileName))
? ? ? ? ? ? ? ? ? ?return null;
? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?byte[] buff = File.ReadAllBytes(fileName);
? ? ? ? ? ? ? ? ? ?using (MemoryStream ms = new MemoryStream(buff))
? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ?BinaryFormatter formatter = new BinaryFormatter();
? ? ? ? ? ? ? ? ? ? ? ?return (DSConfig)formatter.Deserialize(ms);
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ? ? ?catch (Exception ex)
? ? ? ? ? ?{
? ? ? ? ? ?}
? ? ? ? ? ?return null;
? ? ? ?}
? ?}
}

調(diào)用示例

private const string CONFIGNAME = "b1b4af87-1870-11e9-a31b-8cec4b4fece0.cfg";
public static string ConfigName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Viewer",CONFIGNAME);
Config config = Config.LoadFromFile(ConfigName);
//對Config類里面參數(shù)賦值后保存
Config.SaveTo(ConfigName);

BinaryFormatte序列化,示例二:

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace Binaryformats
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Person p = new Person();
            p.Sex = 1;
            p.Age = 21;
            p.Name = "dfr";
            byte[] serBytes = BinaryFormat.Serialize(p); //序列化
            Person pp = (Person) BinaryFormat.Deserialize(serBytes); //反序列化,object類轉(zhuǎn)化成自己定義的
            Console.WriteLine(pp.Name);
            Console.ReadLine();
        }
        [Serializable]
        private class Person //用Serializable做了標(biāo)記,標(biāo)識可以被序列化
        {
            private int _age;
            [NonSerialized] 
            private string _name; //用NonSerialized做了標(biāo)記,標(biāo)識該字段屏蔽序列化
            private int _sex;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            public int Sex
            {
                get { return _sex; }
                set { _sex = value; }
            }
            public int Age
            {
                get { return _sex; }
                set { _sex = value; }
            }
        }
    }
    public class BinaryFormat
    {
        public static byte[] Serialize(Object Urobject) //序列化 返回byte[]類型
        {
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream memory = new MemoryStream();//使用using 可以避免忘記釋放
            bf.Serialize(memory, Urobject);
            byte[] bytes = memory.GetBuffer();
            memory.Close();
            return bytes;
            //或者采用方法:
            using (MemoryStream ms = new MemoryStream(buff))
            {
            }
        }
        public static object Deserialize(byte[] bytes) //反序列化,返回object類型的
        {
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream memory = new MemoryStream(bytes);
            object ss = bf.Deserialize(memory);
            memory.Close();
            return ss;
        }
    }
}

到此這篇關(guān)于C# 二進(jìn)制序列化和反序列化的具體實現(xiàn)的文章就介紹到這了,更多相關(guān)C# 二進(jìn)制序列化和反序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Unity實現(xiàn)多平臺二維碼掃描

    Unity實現(xiàn)多平臺二維碼掃描

    這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)多平臺二維碼掃描,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • c# wpf如何附加依賴項屬性

    c# wpf如何附加依賴項屬性

    這篇文章主要介紹了c# wpf如何附加依賴項屬性,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • 詳解WPF中的APP生命周期以及全局異常捕獲

    詳解WPF中的APP生命周期以及全局異常捕獲

    這篇文章主要為大家詳細(xì)介紹了WPF中的APP生命周期以及全局異常捕獲的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)WPF有一點的幫助,需要的可以了解一下
    2023-03-03
  • C#判斷當(dāng)前程序是否通過管理員運行的方法

    C#判斷當(dāng)前程序是否通過管理員運行的方法

    這篇文章主要介紹了C#判斷當(dāng)前程序是否通過管理員運行的方法,可通過非常簡單的系統(tǒng)函數(shù)調(diào)用實現(xiàn)對當(dāng)前程序是否通過管理員運行進(jìn)行判定,是非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • C#中dictionary如何根據(jù)索引值獲取Key值

    C#中dictionary如何根據(jù)索引值獲取Key值

    這篇文章主要介紹了C#中dictionary如何根據(jù)索引值獲取Key值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • C#如何對Dictionary遍歷賦值

    C#如何對Dictionary遍歷賦值

    這篇文章主要介紹了C#如何對Dictionary遍歷賦值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • c#實現(xiàn)無標(biāo)題欄窗口的拖動

    c#實現(xiàn)無標(biāo)題欄窗口的拖動

    本篇文章是對c#中實現(xiàn)無標(biāo)題欄窗口拖動的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C#常用自定義函數(shù)小結(jié)

    C#常用自定義函數(shù)小結(jié)

    這篇文章主要介紹了C#常用自定義函數(shù),包括將數(shù)組轉(zhuǎn)成字符串、DateTime時間格式轉(zhuǎn)換為Unix時間戳格式和生成某個范圍內(nèi)的隨機(jī)數(shù),需要的朋友可以參考下
    2014-09-09
  • c#實現(xiàn)用SQL池,多線程定時批量執(zhí)行SQL語句的方法

    c#實現(xiàn)用SQL池,多線程定時批量執(zhí)行SQL語句的方法

    構(gòu)建SQL池,分離業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層,讓業(yè)務(wù)邏輯層從低效的數(shù)據(jù)庫操作解脫,以提高系統(tǒng)整體性能
    2013-10-10
  • C# 郵件發(fā)送和接收實現(xiàn)代碼

    C# 郵件發(fā)送和接收實現(xiàn)代碼

    這兩個方法很容易理解,只實現(xiàn)了最基本的功能,如果需要可以查看源代碼獲取更多信息。
    2009-07-07

最新評論

邹城市| 新源县| 肇源县| 左权县| 宁晋县| 大理市| 开远市| 合山市| 南昌市| 金坛市| 金坛市| 黑河市| 黄龙县| 万山特区| 庆元县| 顺昌县| 河北省| 宣威市| 若尔盖县| 铜鼓县| 平度市| 凤翔县| 民勤县| 建阳市| 新龙县| 太保市| 海安县| 商水县| 东丽区| 六安市| 济源市| 西宁市| 土默特右旗| 塘沽区| 兰坪| 梨树县| 阳城县| 永仁县| 瑞昌市| 南川市| 石城县|