县网站建设方案,春雨直播正版下载,wordpress用户邮箱验证码,中国建设银行官网站预约纪念币[System.Serializable]标记类 序列化 [System.Serializable]是一个C#语言中的属性#xff0c;用于标记类#xff0c;表示该类的实例可以被序列化和反序列化。序列化是指将对象转换为字节流的过程#xff0c;以便可以将其保存到文件、数据库或通过网络传输。反序列化则是将字…[System.Serializable]标记类 序列化 [System.Serializable]是一个C#语言中的属性用于标记类表示该类的实例可以被序列化和反序列化。序列化是指将对象转换为字节流的过程以便可以将其保存到文件、数据库或通过网络传输。反序列化则是将字节流转换回对象的过程。
通过在类的定义前添加 [System.Serializable] 属性可以告诉编译器该类可以被序列化。这样在需要将该类的实例序列化或反序列化时就可以使用相关的方法或工具来处理。
用一个通俗易懂的例子来解释。
假设你正在玩一个角色扮演游戏游戏中有一个角色类表示你所扮演的游戏人物。这个角色类包含了角色的姓名、等级、经验值等属性还包含了一些方法来处理角色的行为比如攻击、防御等。
现在你希望能够在游戏中保存你的角色并且在下次进入游戏时能够恢复到上次离开游戏时的状态。这时就需要将角色对象序列化。
假设游戏提供了一个保存功能当你选择保存游戏时系统会把你当前的角色对象序列化为字节流并保存在文件中比如一个存档文件。这样当你下次再打开游戏时系统会读取该存档文件并将字节流反序列化为角色对象从而恢复出你之前保存的角色状态。
通过序列化和反序列化你可以在游戏中实现数据的持久化随时保存和加载角色对象而不会丢失之前的游戏进度。
这只是一个简单的例子类的序列化在实际应用中还有更多的用途比如在分布式系统中传输对象、在网络通信中传输数据等。通过序列化我们可以方便地将对象转换为字节流进行传输和存储实现数据的持久化和跨系统的通信。
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(string[] args){// 创建一个Person对象Person person new Person();person.Name 小明;person.Age 20;// 将对象序列化为字节数组BinaryFormatter formatter new BinaryFormatter();MemoryStream stream new MemoryStream();formatter.Serialize(stream, person);byte[] bytes stream.ToArray();// 将字节数组反序列化为对象stream.Position 0;Person clonePerson (Person)formatter.Deserialize(stream);// 输出原始对象和克隆对象的属性Console.WriteLine(原始对象 Name{0}, Age{1}, person.Name, person.Age);Console.WriteLine(克隆对象 Name{0}, Age{1}, clonePerson.Name, clonePerson.Age);}
}该示例中我们定义了一个名为 Person 的自定义类并为其添加了 [Serializable] 属性以告诉编译器该类可以被序列化。
在 Main 方法中我们首先创建了一个 Person 对象并设置其 Name 和 Age 属性。然后我们使用 BinaryFormatter 对象将该对象序列化为一个字节数组并将其保存在 MemoryStream 中。
接着我们使用 BinaryFormatter 对象将 MemoryStream 中的字节数组反序列化为一个新的 Person 对象并将其存储在 clonePerson 变量中。
最后我们输出了原始对象和克隆对象的属性以确认序列化和反序列化是否成功。如果一切顺利该示例应该输出如下文本 原始对象 Name小明, Age20 克隆对象 Name小明, Age20 上就是一个简单的C#代码示例演示了如何将自定义类进行序列化和反序列化。需要注意的是序列化和反序列化操作会将对象转换为字节流因此需要确保类中包含的属性都可以被序列化。通常情况下基本数据类型和字符串都可以被序列化如果类中包含其他对象则需要确保这些对象也可以被序列化。