`n C#如何实现序列化和反序列化?

C#如何实现序列化和反序列化?

Clock Icon 发布时间:2026/12/8 1:39  · 

序列化和反序列化是将对象转换为可存储格式的过程。序列化可以将对象转换为字节流,反序列化则是将字节流重建为对象。在NET/" style="text-decoration: none; color: inherit;" title="C#">C#中,使用`System.Text.Json`、`Newtonsoft.Json`和`BinaryFormatter`等库完成这些操作。
使用`System.Text.Json`非常简单。引入相应的命名空间,并使用`JsonSerializer.Serialize`方法进行序列化。对于反序列化,可以使用`JsonSerializer.Deserialize`方法。示例代码如下:
```csharpusing System.Text.Json;public class Person{ public string Name { get; set; } public int Age { get; set; }}// 序列化var person = new Person { Name = "Alice", Age = 30 };string jsonString = JsonSerializer.Serialize(person);// 反序列化var deserializedPerson = JsonSerializer.Deserialize(jsonString);```
`Newtonsoft.Json`是另一个常用的选择,其功能更为强大。使用方法类似,先添加引用,然后利用`JsonConvert.SerializeObject`和`JsonConvert.DeserializeObject`分别进行序列化和反序列化。示例代码如下:
```csharpusing Newtonsoft.Json;public class Person{ public string Name { get; set; } public int Age { get; set; }}// 序列化var person = new Person { Name = "Bob", Age = 25 };string jsonString = JsonConvert.SerializeObject(person);// 反序列化var deserializedPerson = JsonConvert.DeserializeObject(jsonString);```
如果需要进行二进制的序列化,`BinaryFormatter`能够满足需求,但对特定对象的支持较好。需要注意的是,`BinaryFormatter`在某些情况下可能不安全,因此请谨慎使用。以下是简单示例:
```csharpusing System.IO;using System.Runtime.Serialization.Formatters.Binary;[Serializable]public class Person{ public string Name { get; set; } public int Age { get; set; }}// 序列化var person = new Person { Name = "Charlie", Age = 35 };IFormatter formatter = new BinaryFormatter();using (Stream stream = new FileStream("person.dat", FileMode.Create, FileAccess.Write)){ formatter.Serialize(stream, person);}// 反序列化using (Stream stream = new FileStream("person.dat", FileMode.Open, FileAccess.Read)){ var deserializedPerson = (Person)formatter.Deserialize(stream);}```
在选择序列化方法时,可以根据项目需求考虑性能、安全性和兼容性等因素。如果需要与其他系统或语言进行数据交换,JSON格式的序列化通常是首选。而在性能要求较高的情况下,二进制序列化可能更合适。

推荐文章

热门文章