C#中的反序列化教程

201 阅读5分钟

C#中的反序列化

C#中的序列化是将一个对象带入内存中组成的结构中的过程。反序列化是与序列化相反的。它涉及到检索序列化的对象,以便它可以被存储在内存中。

换句话说,它通过设置properties,fields, 等来重新建立对象的状态。

前提条件

要跟上进度,你需要

反序列化的语法

下面的代码显示了在c#中使用XmlSerializer对一个对象进行反序列化的语法。

FileInputstream fileInputstream = new FileInputstream(fileInputpath, fileInputMode.open);
XmlSerializer = new XmlSerializer();
ClassName objectName = (ClassName)XmlSerializer.Deserializer(fileInputstream);

反序列化在C#中如何工作

C#中的反序列化依赖于下面讨论的几个库。

首先,你导入System.IO namespace ,然后用它来打开包含数据的文件。

其次,在使用XmlSerialize class 工作时,导入System.Xml.Serialization 。当与binaryformatter class 一起工作时,使用System.Runtime.Serialization.Formatters.Binary

JsonSerialize类要求人们导入NewtonSoft.Json 库。

在C#中,一个对象可以通过三种主要方式被反序列化。

  • XML反序列化。
  • 二进制反序列化。
  • JSON反序列化。

在C#中反序列化的例子

Xml序列化和反序列化

使用XML ,数据的序列化和反序列化需要System.Xml.Serialize 名称空间。

下面的代码显示了一个对象是如何使用XmlSerialize类进行序列化和反序列化的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text
using System.Threading.Threading;
using System.IO;
using System.Xml.Serialization;//Xml serializer namespace.
namespace ConsoleApp1
{
   //serializable attribute makes this class serializable.
  [Serializable] class Person {
    public static void XmlSerializeData() {
      string Name = "Teresia Wambui";
      Stream stream1 = new FileStream(@"D:Example.txt", FileMode.Create);//creating file to store data.
      XmlSerializer xmlSerializer = new XmlSerializer();//xmlSerializer object.
      xmlSerializer.Serialize(stream1, Name);//serialize stream1 object.
      stream1.Close();//close stream1.
    }
    //xml deserialization.
    public static void XmlDeserializeData(){
     Stream stream1 = new FileStream(@"D:Example.txt", FileMode.Read);//open and read contents of the file
     XmlSerializer xmlSerializer = new XmlSerializer();
     string content = "";//we are going to deserialize the xml file here.
     content = (string)xmlSerializer.Deserialize(stream1);//deserialize data.
     stream1.Close();//close stream1
     Console.WriteLine("Deserialized object: ");//dispay data.
     Console.WriteLine(content)//display deserialized data.
    }
    static void Main(string[] args){
      XmlSerializeData();
      XmlDeserializeData();
      Console.Readline
    }
  }
}

在上面的程序中,我们使用XML序列化类对一个对象进行序列化和反序列化。

我们首先创建了string Name = "Teresia Wambui" 对象并指定了一个文件来存储它;Stream stream1 = new FileStream(@"D:Example.txt", FileMode.Create)

接下来,我们创建了XML序列化器对象XmlSerializer xmlSerializer = new XmlSerializer() ,然后通过调用xmlSerializer.Serialize(stream1, Name) 函数来序列化该对象。

在反序列化过程中,我们使用Stream stream1 = new FileStream(@"D:Example.txt", FileMode.Read) 读取文件的内容。

然后我们通过初始化一个空字符串string content = "" ,创建一个新的对象。content 变量将存储我们反序列化的数据。

最后,我们使用content = (string)xmlSerializer.Deserialize(stream1) 来反序列化文件中的数据。反序列化后的数据用Console.WriteLine(content) 来显示。

二进制序列化和反序列化

将一个对象转换为二进制格式所涉及的方法被称为二进制序列化。因此,二进制反序列化涉及将二进制对象变回人类可读的格式。

为了在C#中执行二进制序列化。我们使用System.Runtime.Serialization.Formatters.Binary 命名空间。

下面的代码展示了二进制对象的序列化和反序列化。这个过程依赖于binary formatter 类。

using System;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Threading.Tasks;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;//binary serialization namespace.
namespace ConsoleApp1
{
  //serializable attribute make the class serializable.
  [Serializable] class Person {
    //serialization.
    public static void BinarySerializeData() {
      string Name = "Teresia Wambui";
      Stream stream2 = new FileStream(@"C:Example.txt", FileMode.Create);//creating file to store data.
      Formatter format = new BinaryFormatter();//format object.
      format.Serialize(stream2, Name);//serialize stream2 object.
      stream2.Close();//close stream2.
    }
    //binary deserialization.
    public static void BinaryDeserializeData(){
     Stream stream2 = new FileStream(@"C:Example.txt", FileMode.Read);//open file and read the contents.
     Formatter format = new BinaryFormatter();
     string content = "";//we are going to deserialize the binary file here.
     content = (string)format.Deserialize(stream2);//deserialize.
     stream2.Close();//close stream2.
     Console.WriteLine("Deserialized object: ");//display.
     Console.WriteLine(content)//display the deserialized data.
    }
    static void Main(string[] args){
      BinarySerializeData();
      BinaryDeserializeData();
      Console.Readline
    }
  }
}

在上面的代码中,我们使用二进制格式器类对一个对象进行了序列化和反序列化。

在序列化过程中,我们首先创建了string Name = "Teresia Wambui" 对象。

接下来,我们使用Stream stream2 = new FileStream(@"C:Example.txt", FileMode.Create) 创建了一个文件来存储该对象。

最后,我们通过调用format.Serialize(stream2, Name) 函数和传入所需的参数来序列化该对象。

在序列化之后,我们继续对该对象进行反序列化。我们使用Stream stream2 = new FileStream(@"C:Example.txt", FileMode.Read) 来读取文件的内容。

然后使用(string)format.Deserialize(stream2) 方法对数据进行反序列化。结果被存储在content 变量中。使用Console.WriteLine(content) 显示反序列化的对象。

JSON序列化和反序列化

JSON序列化是将一个对象转换为JSON格式的过程。

另一方面,JSON反序列化涉及将JSON文件转换回一个对象。

为了实现JSON序列化和反序列化,我们使用NewtonSoft.Json namespace

下面的代码显示了在C#中如何使用Json serialize 类对一个对象进行序列化和反序列化。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using NewtonSoft.Json;//Json serializer namespace
using NewtonSoft.Linq.Json;

namespace ConsoleApp1
{
  [Serializable] class Person {
    //serialization
    public static void JsonSerializeData() {
      string Name = "Teresia Wambui";
      Stream stream3 = new FileStream(@"C:Example.txt", FileMode.Create);//creating file to store data.
      JsonSerializer jsonSerializer = new JsonSerializer();//object for jsonSerializer
      jsonSerializer.Serialize(stream3, Name);//serialize stream3 object
      stream3.Close();//close the stream1
    }
    //deserialization
    public static void JsonDeserializeData(){
     Stream stream3 = new FileStream(@"C:Example.txt", FileMode.Read);//open and read the contents in the file
     JsonSerializer jsonSerializer = new JsonSerializer();
     string content = "";//we are going to deserialize the Json file here
     content = (string)Json.Deserialize(stream1);//deserialize
     stream3.Close();//close stream3
     Console.WriteLine("Deserialized object: ");//output
     Console.WriteLine(content);//output name
    }
    static void Main(string[] args){
      JsonSerializeData();
      JsonDeserializeData();
      Console.Readline
    }
  }
}

在上面的代码中,我们使用JSON类序列化器对数据进行了序列化和反序列化。

我们使用string Name = "Teresia Wambui" 来初始化一个对象,然后通过调用Stream stream3 = new FileStream(@"C:Example.txt", FileMode.Create) 创建一个文件来存储数据。

接下来,我们使用JsonSerializer jsonSerializer = new JsonSerializer(); ,为jsonSerializer 创建一个对象。然后我们调用jsonSerializer.Serialize(stream3, Name) 来序列化该对象。

在反序列化过程中,我们使用Stream stream3 = new FileStream(@"C:Example.txt", FileMode.Read) 来访问文件的内容。

然后我们创建了一个新的对象(content),并将其初始化为一个空字符串,string content = " "

最后,我们通过调用content = (string)Json.Deserialize(stream1) 来反序列化该对象,然后用Console.WriteLine(content) 来显示结果。

总结

在这篇文章中,你已经学会了C#中的序列化和反序列化。我们还讨论了反序列化对象的三种主要技术;XML反序列化、二进制反序列化和JSON反序列化。

请注意,反序列化是在序列化之后进行的。

因此,你可以利用这些知识来制作其他高质量的C#应用程序。