C# 对象序列化

PHPz
发布: 2024-09-03 15:05:54
原创
689 人浏览过

要将对象转换为序列或字节流,所使用的过程称为序列化。为了将对象传输到数据库、文件或内存,我们使用序列化。为了在需要时精确地重新创建或恢复对象,序列化起着至关重要的作用,因为它保存了对象的状态。通过这一声明,我们的意思是,使用 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# 对象序列化使用示例

让我们讨论 C# 对象序列化的示例。

示例#1

在下面的代码中,我们必须序列化 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();
}
}
}
登录后复制

输出:

C# 对象序列化

示例#2

在下面的代码中,我们必须序列化类 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);
}
}
}
登录后复制

输出:

C# 对象序列化

示例 #3

在下面的示例中,为了对象的序列化,我们首先创建了一个流(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# 反序列化相关的各种示例以及两者的语法。

以上是C# 对象序列化的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!