C#中的反序列化
C#中的序列化是将一个对象带入内存中组成的结构中的过程。反序列化是与序列化相反的。它涉及到检索序列化的对象,以便它可以被存储在内存中。
换句话说,它通过设置properties,fields, 等来重新建立对象的状态。
前提条件
要跟上进度,你需要
- 在你的机器上安装有visual studio 2019IDE。
- 熟悉C#和.NET编程。
反序列化的语法
下面的代码显示了在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#应用程序。