Csharp实现序列化和反序列化
时间: 2024-08-17 10:02:20 浏览: 50
C#之JSON序列化和反序列化
C#实现序列化和反序列化主要通过.NET Framework提供的序列化机制来完成。序列化是指将对象的状态信息转换为可以存储或传输的形式的过程,在.NET中通常是将对象转换为XML或二进制格式。反序列化则是序列化的逆过程,即将存储或传输的格式转换回原来的对象状态。
在C#中,可以通过以下步骤实现序列化和反序列化:
1. 标记类为可序列化:使用`[Serializable]`属性标记那些需要被序列化的类。
2. 使用`BinaryFormatter`或`SoapFormatter`等序列化工具进行序列化和反序列化操作。例如,使用`BinaryFormatter`时,可以调用`BinaryFormatter.Serialize(Stream, Object)`方法将对象序列化到流中,使用`BinaryFormatter.Deserialize(Stream)`方法从流中反序列化对象。
下面是一个简单的例子:
```csharp
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
// 创建一个Person对象实例
Person person = new Person { Name = "张三", Age = 30 };
// 序列化操作
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("person.dat", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, person);
stream.Close();
// 反序列化操作
stream = new FileStream("person.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
Person deserializedPerson = (Person)formatter.Deserialize(stream);
stream.Close();
Console.WriteLine("反序列化后的对象姓名:" + deserializedPerson.Name + ",年龄:" + deserializedPerson.Age);
}
}
```
需要注意的是,由于安全性问题,`BinaryFormatter`在.NET Core 3.0及以上版本和.NET 5+版本中已被弃用。因此,如果使用这些版本,推荐使用`System.Text.Json`、`System.Runtime.Serialization.Json.DataContractJsonSerializer`或者`Protobuf`等其他序列化方式。
阅读全文