首页  >  文章  >  后端开发  >  C# 序列化

C# 序列化

WBOY
WBOY原创
2024-09-03 15:30:13652浏览

以下文章提供了 C# 序列化的概述。将对象实例转换为数据流的过程称为序列化,并且对象实例的状态转换为数据流,因为它可以跨不同网络传输并持久保存在存储位置中。这就是序列化的优点,可以将转换后的数据流以跨平台兼容的格式跨不同网络传输,并将转换后的流数据以持久或非持久对象状态保存到存储介质中,以便可以在不同的网络上传输相同的副本。后来创建的。

C# 序列化对象的步骤

以下是C#序列化对象的步骤:

  • 创建了一个流对象。
  • 创建了一个 BinaryFormatter 对象。
  • 调用 Serialize( ) 方法。

C# 序列化的工作原理

  • 每当我们使用应用程序时,都需要将数据存储在持久或非持久的介质中,以便以后可以检索相同的数据。这可以通过使用序列化的概念来实现。
  • 将对象的实例转换为字节流,将对象的状态移动到文件的内存或数据库中的过程称为序列化。
  • 序列化对于将对象以兼容的格式通过网络传输到跨平台至关重要。
  • 还可以使用序列化创建对象的克隆。
  • 程序中必须包含 Runtime.Serialization 命名空间才能在 C# 中使用序列化。
  • [ Serialized ] 属性用于在 C# 中使类可序列化。

演示 [ Serialized ] 类的示例类:

代码:

[Serializable]
public class Check
{
public int code;
public string name;
}
  • 类似地,如果我们想让类的任何成员不可序列化,我们可以使用 [ NonSerialized() ] 属性。

考虑下面的示例类来演示 [ NonSerialized() ] 属性:

代码:

[Serializable]
public class Check
{
public int code;
public string name;
[NonSerialized()]
Public double price;
}
  • C# 支持以下类型的序列化。

下面给出了 C# 支持的序列化类型:

1.二进制序列化

  • 所有序列化技术中最快的是二进制序列化。
  • 可以使用二进制序列化将对象序列化为二进制流。
  • 当使用二进制序列化将对象序列化为输出流时,对象的身份被保留。
  • 系统。运行时。系列化。格式化程序。程序中必须包含二进制命名空间才能使用二进制序列化。

2. SOAP 序列化

  • 简单对象访问协议是 SOAP 的缩写。
  • 如果我们必须将对象从一个应用程序传输到由异构架构组成的另一应用程序,我们会使用简单对象访问协议序列化。
  • 可移植性是使用简单对象访问协议序列化的主要好处。
  • 可以使用简单对象访问协议序列化以简单对象访问协议的形式序列化对象。
  • 系统。运行时。系列化。格式化程序。程序中必须包含 Soap 命名空间才能使用简单对象访问协议序列化。

3. XML 序列化

  • 类实例的公共成员可以使用 XML 序列化序列化为 XML 流。
  • 与二进制序列化的速度相比,XML 序列化的速度非常慢。
  • 通过使用 XML 序列化提供跨平台支持。
  • XML 序列化是基于文本的。
  • XML 序列化易于阅读。
  • XML 序列化可以轻松编辑。
  • 可以在 XmlAttribute 上设置属性,以使用 XML 序列化来序列化该属性。

考虑下面的代码来演示 XmlAttribute 的使用:

代码:

[XmlAttribute("Name")]
public string Name
{
get
{
return Name;
}
set
{
Name = val;
}
}
  • 我们利用 XmlSerializer 通过 XML 序列化来序列化对象。

考虑下面的代码来演示 XmlSerializer 的使用:

代码:

XmlSerializer Serializer = new XmlSerializer(typeof(Prod));
using (TextWriter Writer = new StreamWriter(@"C:\Prod.xml"))
{
xmlSerializer.Serialize(Writer, prodObject);
}

4.自定义序列化

  • 为了控制某种类型实例的序列化和反序列化,我们使用自定义序列化。
  • 可以通过实现ISerialized接口来实现自定义序列化。
  • GetObjectData() 方法由 ISerialized 接口声明。

考虑下面的代码,通过实现 ISerialized 接口来演示自定义序列化:

代码:

[Serializable]
public class Prod : ISerializable
{
public void GetObjectData(SerializationInfo information, StreamingContext cont)
{
//Usual code
}
}

示例

下面给出的是 C# 序列化的示例:

演示序列化概念的 C# 程序。

代码:

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;
//a namespace called demo is created
namespace Demo
{
//Serializable attribute is declared
[Serializable]
//a class check is defined which will be used for serialization
class Check
{
public int identity;
public String nam;
static void Main(string[] args)
{
//an object of the check class is created to serialize it to the file Example.txt
Check ob = new Check();
ob.identity = 10;
ob.nam = "Shobha";
//a file stream is created
IFormatter format = new BinaryFormatter();
Stream stream1 = new FileStream(@"E:\Example.txt",FileMode.Create,FileAccess.Write);
//serialization of the object of the class check is done
format.Serialize(stream1, ob);
stream1.Close();
//a file stream is created
stream1 = new FileStream(@"E:\Example.txt",FileMode.Open,FileAccess.Read);
//the object of the class check is deserialized
Check ob1 = (Check)format.Deserialize(stream1);
//the data is written to the console
Console.WriteLine(ob1.identity);
Console.WriteLine(ob1.nam);
Console.ReadKey();
}
}
}

Output:

C# 序列化

In the above program, a namespace called demo is defined. Then a Serializable attribute is defined. A class check is defined to demonstrate the concept of serialization using this class. Two properties identity and nam are defined in the class to which the values 10 and Shobha are assigned respectively. Then an object of the check class is created to serialize it to the file Example.txt. Then a formatter class is defined to convert the object of the class check to a binary stream.

Then a file stream object is created to open the file Example.txt in write mode to write the values of the properties identity and nam into it. Then serialize method is used to transfer the binary data into the text file. Finally, We use deserialize method to deserialize the contents of the text file Example.txt and the data is written to the console as shown in the output snapshot above.

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:Timer in C#下一篇:Metadata in C#