C# BinaryFormatter进行串行化

NET框架提供了两种种串行化的方式:

1、是使用BinaryFormatter进行串行化;

2、使用XmlSerializer进行串行化。

        第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储。可以使用[Serializable]属性将类标志为可序列化的。如果某个类的元素不想被序列化,1、可以使用[NonSerialized]属性来标志,2、可以使用[XmlIgnore]来标志。

        序列化意思指的是把对象的当前状态进行持久化,一个对象的状态在面向对象的程序中是由属性表示的,所以序列化类的时候是从属性读取值以某种格式保存下来,而类的成员函数不会被序列化,.net存在几种默认提供的序列化,二进制序列化,xml和json序列化会序列化所有的实例共有属性。

这里简单介绍:BinaryFormatter以二进制格式序列化和反序列化对象。

BinaryFormatte序列化:将对象转化成二进制,BinaryFormatte反序列化就是将二进制转化为对象;

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

最常用的两个方法:

Deserialize(Stream)     将指定的流反序列化成对象

Serialize(Stream, Object)     将对象序列化到给定的流

两个常用的属性:

Serializable     表示可以被序列化

NonSerializable     屏蔽被序列化

namespace ModelConfig
{    
	[Serializable]   
	public class Config   
	{                
		[NonSerialized]  // 表示下面这个age字段不进行序列化             
		private int age{ get; set; }       
		public string Language { 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 Config 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 (Config)formatter.Deserialize(ms);                   
					}               
				}           
			}           
			catch (Exception ex)           
			{
			}           
			return null;       
		}   
	}
}

 引用示例

引用示例:
private const string CONFIGNAME = "b1b4af87.cfg";
public static string ConfigName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Viewer",CONFIGNAME);
Config config = Config.LoadFromFile(ConfigName);

//对Config类里面参数赋值后保存
Config.SaveTo(ConfigName);

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C# BinaryFormatter 是一个用于序列化和反序列化 .NET 对象的类。它可以将对象转换为字节数组,以便在网络上传输或保存到文件中,也可以将字节数组转换回对象。 以下是一个简单的示例,演示如何使用 BinaryFormatter 将对象序列化为字节数组并将其保存到文件中: ``` using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { Person person = new Person { Name = "John", Age = 30 }; BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(); formatter.Serialize(stream, person); byte[] bytes = stream.ToArray(); File.WriteAllBytes("person.dat", bytes); } } ``` 在这个示例中,我们创建了一个名为 Person 的简单类,并使用 BinaryFormatter 将其序列化为字节数组。然后,我们使用 MemoryStream 将字节数组保存到内存中,并使用 File.WriteAllBytes 将其写入文件 "person.dat" 中。 反序列化对象的过程与序列化相反。以下是一个简单的示例,演示如何使用 BinaryFormatter 从文件中读取字节数组并将其反序列化为对象: ``` using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { byte[] bytes = File.ReadAllBytes("person.dat"); BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(bytes); Person person = (Person)formatter.Deserialize(stream); Console.WriteLine("Name: {0}", person.Name); Console.WriteLine("Age: {0}", person.Age); } } ``` 在这个示例中,我们使用 File.ReadAllBytes 从文件 "person.dat" 中读取字节数组。然后,我们使用 MemoryStream 将字节数组加载到内存中,并使用 BinaryFormatter 将其反序列化为 Person 对象。最后,我们输出 Person 对象的属性值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值