C#序列化

.net的运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。

 

  序列化的目的:

 

  1、以某种存储形式使自定义对象持久化;

 

  2、将对象从一个地方传递到另一个地方。

 

  实质上序列化机制是将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。而要想实际的写出这个流,就要使用那些实现了IFormatter接口的类里的Serialize和Deserialize方法。
 

  在.net框架里提供了这样两个类:

  • BinaryFormatter

 

  •   BinaryFormatter使用二进制格式化程序进行序列化。您只需创建一个要使用的流和格式化程序的实例,然后调用格式化程序的 Serialize 方法。流和要序列化的对象实例作为参数提供给此调用。类中的所有成员变量(甚至标记为 private 的变量)都将被序列化。

  首先我们创建一个类:

Serializable属性用来明确表示该类可以被序列化。同样的,我们可以用NonSerializable属性用来明确表示类不能被序列化。

 

 接着我们创建一个该类的实例,然后序列化,并存到文件里持久:

而将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。

二SoapFormatter

 

前面我们用BinaryFormatter以二进制格式来序列化。很容易的我们就能把前面的例子改为用SoapFormatter的,这样将以xml格式 化,因此能有更好的可移植性。所要做的更改只是将以上代码中的格式化程序换成 SoapFormatter,而 Serialize 和 Deserialize 调用不变。对于上面使用的示例,该格式化程序将生成以下结果。

在这里需要注意的是,无法继承 Serializable 属性。如果从 MyObject 派生出一个新的类,则这个新的类也必须使用该属性进行标记,否则将无法序列化。例如,如果试图序列化以下类实例,将会显示一个 SerializationException,说明 MyStuff 类型未标记为可序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,对象序列是将对象转换为可存储或传输的格式的过程。可以使用 C# 中的 System.Runtime.Serialization 命名空间中的类来实现对象序列。下面是一个简单的示例,展示如何使用 C# 进行对象序列: ```csharp using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; // 定义一个需要序列的类 [Serializable] public class MyClass { public int x; public string y; } class Program { static void Main(string[] args) { // 创建一个 MyClass 对象 MyClass obj = new MyClass(); obj.x = 10; obj.y = "Hello World"; // 创建一个二进制格式程序 BinaryFormatter formatter = new BinaryFormatter(); // 创建一个文件流,用于将对象序列到文件中 FileStream stream = new FileStream("data.bin", FileMode.Create); // 使用格式程序将对象序列到文件中 formatter.Serialize(stream, obj); // 关闭文件流 stream.Close(); // 读取序列后的对象 stream = new FileStream("data.bin", FileMode.Open); // 使用格式程序将对象反序列 MyClass obj2 = (MyClass)formatter.Deserialize(stream); // 输出反序列后的对象的属性值 Console.WriteLine(obj2.x); Console.WriteLine(obj2.y); // 关闭文件流 stream.Close(); } } ``` 在上面的示例中,我们首先定义了一个名为 MyClass 的简单类,并使用 Serializable 属性标记该类可序列。然后,我们创建了一个 MyClass 对象,并将其序列到名为 data.bin 的文件中。最后,我们再次打开该文件,并使用格式程序将其反序列为 MyClass 对象,然后输出其属性值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值