C#的序列化[Serializable()]
- IT业界
- 2025-08-29 17:21:01
![C#的序列化[Serializable()]](/0pic/pp_05.jpg)
[Serializable] 是 .NET 框架中的一个特性(Attribute),用于标记一个类、结构体、枚举或委托可以被序列化。序列化是将对象的状态转换为可以存储或传输的格式(如二进制、XML 或 JSON)的过程,以便在需要时可以重新创建该对象。
主要用途: 持久化存储:将对象的状态保存到文件或数据库中,以便后续恢复。
跨进程或跨机器传输:在分布式系统中,将对象通过网络传输到其他进程或机器。
深拷贝对象:通过序列化和反序列化实现对象的深拷贝。
如何使用: 在类、结构体、枚举或委托上添加 [Serializable] 特性,即可使其支持序列化。例如:
[Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } public Person(string name, int age) { Name = name; Age = age; } }序列化示例: 以下是一个将对象序列化为二进制格式并保存到文件的示例:
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; } public Person(string name, int age) { Name = name; Age = age; } } class Program { static void Main() { // 创建一个 Person 对象 Person person = new Person("Alice", 30); // 序列化对象到文件 BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream("person.dat", FileMode.Create)) { formatter.Serialize(stream, person); } Console.WriteLine("对象已序列化到文件。"); // 从文件反序列化对象 using (FileStream stream = new FileStream("person.dat", FileMode.Open)) { Person deserializedPerson = (Person)formatter.Deserialize(stream); Console.WriteLine($"反序列化对象: Name = {deserializedPerson.Name}, Age = {deserializedPerson.Age}"); } } }关键点: 默认序列化:使用 [Serializable] 特性后,.NET 会自动序列化所有字段(包括私有字段)。如果某些字段不需要序列化,可以使用 [NonSerialized] 特性标记。
[Serializable] public class Person { public string Name { get; set; } [NonSerialized] private int Age; // 这个字段不会被序列化 }自定义序列化:如果需要控制序列化过程,可以实现 ISerializable 接口。
序列化格式:.NET 支持多种序列化格式,如二进制(BinaryFormatter)、XML(XmlSerializer)和 JSON(JsonSerializer)。
注意事项: 安全性:BinaryFormatter 已被标记为不安全,不建议在新代码中使用,因为它容易受到反序列化攻击。推荐使用更安全的序列化方式,如 System.Text.Json 或 XmlSerializer。
版本兼容性:序列化的对象在不同版本的程序之间可能存在兼容性问题,尤其是在字段或属性发生变化时。
性能:序列化和反序列化可能会影响性能,尤其是在处理大型对象或复杂对象图时。
替代方案: System.Text.Json:用于 JSON 序列化和反序列化的高性能库。
XmlSerializer:用于 XML 序列化和反序列化。
DataContractSerializer:支持更复杂的序列化场景,通常用于 WCF 服务。
总结来说,[Serializable] 是 .NET 中用于标记对象可序列化的特性,但在现代开发中,建议使用更安全、更灵活的序列化方式(如 JSON 或 XML)。
C#的序列化[Serializable()]由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C#的序列化[Serializable()]”
上一篇
字符设备驱动