要将对象转换为序列或字节流,所使用的过程称为序列化。为了将对象传输到数据库、文件或内存,我们使用序列化。为了在需要时精确地重新创建或恢复对象,序列化起着至关重要的作用,因为它保存了对象的状态。通过这一声明,我们的意思是,使用 Web 服务,只需将对象从一个域传输到另一个域,就可以将对象传输到任何远程位置。序列化的逆过程称为反序列化,因为它是将序列化的字节序列转换为对象的过程。
C# 对象序列化语法:
对于C#中对象的序列化,有一个属性叫做[Serialized]。如果未以正确的方式提及该属性,则在运行时会引发 SerializedException。
语法如下:
public static void SomeData() { string aoo = "Heyoo! Thank you for visiting us...."; FileStream boo = new FileStream(@"D:\EduCBA.txt", FileMode.Create,FileAccess.Write, FileShare.None); BinaryFormatter coo = new BinaryFormatter(); coo.Serialize(boo, aoo); boo.Close(); }
C# 对象反序列化语法:
语法如下:
public static void AnotherData() { FileStream boo = new FileStream(@"D:\EduCBA.txt", FileMode.Open,FileAccess.Read, FileShare.Read); BinaryFormatter doo = new BinaryFormatter(); string eoo = ""; eoo = (string)doo.Deserialize(boo); boo.Close(); Console.WriteLine("EduCBA’s-se-ria-li-za-tion-&-de-se-ria-li-za-tion-in-C#-exam-ple"); Console.WriteLine("\n"); Console.WriteLine(eoo); }
让我们讨论 C# 对象序列化的示例。
在下面的代码中,我们必须序列化 EduCBA 类,因此我们使用了 [Serialized]。为了阻止代码执行后发生任何错误,应该提及此属性。在提到我们要序列化的类的属性之后,我们描述了类的四个属性,“CourseName1”是一个字符串,“CoursePrice1”是一个整数值,类似地,“CourseName2”是一个字符串,“CoursePrice2”是一个整数价值。要以只读模式打开文件“E:EDUCBA.txt”,会创建一个对象 hello 对象“hello”,最后,我们使用前面提到的属性显示“yum”。
代码:
using System; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; namespace Careerplan { [Serializable] class EduCBA { public String CourseName1; public int CoursePrice1; public String CourseName2; public int CoursePrice2; static void Main(string[] rahul) { EduCBA yum = new EduCBA(); yum.CourseName1 = "C# Training"; yum.CoursePrice1 = 25900; yum.CourseName2 = "C++ Training"; yum.CoursePrice2 = 28490; IFormatter formatter = new BinaryFormatter(); Stream hello = new FileStream(@"E:\EDUCBA.txt",FileMode.Create,FileAccess.Write, FileShare.None); formatter.Serialize(hello, yum); hello.Close(); hello = new FileStream(@"E:\EDUCBA.txt",FileMode.Open,FileAccess.Read, FileShare.Read); hello.Close(); Console.WriteLine(yum.CourseName1); Console.WriteLine(yum.CoursePrice1); Console.WriteLine(yum.CourseName2); Console.WriteLine(yum.CoursePrice2); Console.ReadKey(); } } }
输出:
在下面的代码中,我们必须序列化类 CBA,因此我们使用了 [Serializable]。为了阻止代码执行后发生任何错误,应该提及此属性。在提到我们要序列化的类的属性之后,我们描述了类的九个属性,其中“student_ID1”是一个整数值,“student_name1”是一个字符串,“CGPA1”是一个双精度值,这意味着它包含数字值小数点,类似地,“student_ID2”是整数值,“student_name2”是字符串,“CGPA2”是双精度值,“student_ID3”值是整数,“student_name3”是字符串,“CGPA3”是双精度值。要以只读模式打开文件“E:EDUCBA.txt”,将创建一个对象 hello 和一个对象“learn”,最后,我们使用之前在不同行中提到的属性显示“ID”以及提及数据实际代表什么的文本。
代码:
using System; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Text; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; namespace StudentData { [Serializable] class CBA { public int student_ID1; public String student_name1; public double CGPA1; public int student_ID2; public String student_name2; public double CGPA2; public int student_ID3; public String student_name3; public double CGPA3; static void Main(string[] annie) { CBA ID = new CBA(); ID.student_ID1 = 15023456; ID.student_name1 = "Rahul Kashyap"; ID.CGPA1 = 9.5; ID.student_ID2 = 18023950; ID.student_name2 = "Ankush Rajput"; ID.CGPA2 = 8.7; ID.student_ID3 = 19084653; ID.student_name3 = "Aadarsh Rajput"; ID.CGPA3 = 7.5; IFormatter eduCBA = new BinaryFormatter(); Stream learn = new FileStream(@"E:\EDUCBA.txt",FileMode.Create,FileAccess.Write, FileShare.None); eduCBA.Serialize(learn, ID); learn.Close(); learn = new FileStream(@"E:\EDUCBA.txt",FileMode.Open,FileAccess.Read, FileShare.Read); learn.Close(); Console.Write("\n"); Console.Write("Welcome! Desired data is below"); Console.Write("\n"); Console.Write("\n"); Console.Write("::TABLE::"); Console.Write("\n"); Console.Write("\n"); Console.Write("::ROW1::"); Console.WriteLine("Student_ID: {0}", ID.student_ID1); Console.Write("::ROW2::"); Console.WriteLine("Student_Name: {0}", ID.student_name1); Console.Write("::ROW3::"); Console.WriteLine("CGPA Scored: {0}", ID.CGPA1); Console.Write("\n"); Console.Write("\n"); Console.Write("::ROW1::"); Console.WriteLine("Student_ID: {0}", ID.student_ID2); Console.Write("::ROW2::"); Console.WriteLine("Student_Name: {0}", ID.student_name2); Console.Write("::ROW3::"); Console.WriteLine("CGPA Scored: {0}", ID.CGPA2); Console.Write("\n"); Console.Write("\n"); Console.Write("::ROW1::"); Console.WriteLine("Student_ID: {0}", ID.student_ID3); Console.Write("::ROW2::"); Console.WriteLine("Student_Name: {0}", ID.student_name3); Console.Write("::ROW3::"); Console.WriteLine("CGPA Scored: {0}", ID.CGPA3); } } }
输出:
在下面的示例中,为了对象的序列化,我们首先创建了一个流(FileStream)对象“boo”,然后我们为 BinaryFormatter 对象“coo”创建了一个对象,然后我们调用了“coo.Serialize(boo, aoo)”,这是一个 BinaryFormatter.Serialize() 方法,用于在 C# 中序列化对象。
类似地,对于对象的反序列化,首先我们创建了一个流(FileStream)对象“boo”,用于读取序列化输出,然后我们为 BinaryFormatter 对象“doo”创建了一个对象,然后我们调用了“杜。 Deserialize(boo)”,这是一个 BinaryFormatter.Deserialize() 方法,用于 C# 中对象的反序列化。
代码:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; namespace EDUCBA { class Rahul { public static void SomeData() { string aoo = "Heyoo! Thank you for visiting us...."; FileStream boo = new FileStream(@"D:\EduCBA.txt", FileMode.Create,FileAccess.Write, FileShare.None); BinaryFormatter coo = new BinaryFormatter(); coo.Serialize(boo, aoo); boo.Close(); } public static void AnotherData() { FileStream boo = new FileStream(@"D:\EduCBA.txt", FileMode.Open,FileAccess.Read, FileShare.Read); BinaryFormatter doo = new BinaryFormatter(); string eoo = ""; eoo = (string)doo.Deserialize(boo); boo.Close(); Console.WriteLine("EduCBA’s-se-ria-li-za-tion-&-de-se-ria-li-za-tion-in-C#-exam-ple"); Console.WriteLine("\n"); Console.WriteLine(eoo); } static void Main(string[] foo) { SomeData(); AnotherData(); Console.ReadLine(); } } }
输出:
基于上面的讨论,我们了解了C#中对象的序列化以及C#中同一对象的反序列化。我们也了解序列化的重要性。我们已经讨论了与 C# 序列化和 C# 反序列化相关的各种示例以及两者的语法。
以上是C# 对象序列化的详细内容。更多信息请关注PHP中文网其他相关文章!