深入理解C#序列化与反序列化的详解
本文将详细介绍C#中的序列化和反序列化概念、原理和常见用法,帮助读者全面了解这一重要的语言特性。
什么是序列化和反序列化?
序列化(Serialization)是指将对象转换成二进制流(byte array),以便能够在网络上传输、存储到文件或数据库等场合使用。反序列化(Deserialization)则是将二进制流还原为原始对象的过程。
序列化和反序列化在C#语言中都已经得到了良好的支持,使得开发者可以简单地实现将对象在应用程序或网络之间进行传递和存储的功能。.NET Framework提供了多种序列化方式,常用的包括二进制序列化、Xml序列化和JSON序列化。
二进制序列化
二进制序列化是.NET Framework自带的一种序列化方式,通过将对象序列化为二进制流来实现。二进制序列化的优点是序列化过程快速、占用空间小,但其缺点是可读性差。
下面的代码展示了如何使用二进制序列化将一个自定义的类Person序列化为二进制流:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
var person = new Person { Name = "Tom", Age = 20 };
var stream = new MemoryStream();
var formatter = new BinaryFormatter();
formatter.Serialize(stream, person);
byte[] data = stream.ToArray();
Console.WriteLine(string.Join(", ", data));
}
}
在上面的代码中,我们使用MemoryStream来将序列化后的二进制流保存在内存中,同时使用BinaryFormatter类型进行序列化。通过formatter.Serialize方法可以将对象序列化为二进制流,而stream.ToArray方法则将MemoryStream中存储的二进制数据转换成字节数组。
Xml序列化
Xml序列化是将对象转换为Xml格式的文本流。由于Xml是一种通用且较为灵活的格式,因此在一些场合下Xml序列化更为合适。
下面的代码展示了如何使用Xml序列化将Person对象转换为Xml格式的文本流:
using System;
using System.IO;
using System.Xml.Serialization;
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
var person = new Person { Name = "Tom", Age = 20 };
var stream = new MemoryStream();
var serializer = new XmlSerializer(typeof(Person));
serializer.Serialize(stream, person);
string xml = System.Text.Encoding.UTF8.GetString(stream.ToArray());
Console.WriteLine(xml);
}
}
在上面的代码中,我们使用MemoryStream来将序列化后的Xml格式文本流保存在内存中。通过XmlSerializer类型的Serialize方法可以将对象序列化为Xml格式的文本流。
JSON序列化
JSON序列化是将对象转换为JSON格式的文本流。由于Json是一种通用且较为易读的格式,因此在Web应用程序中更为常见。
下面的代码展示了如何使用Json序列化将Person对象转换为JSON格式的文本流:
using System;
using System.IO;
using System.Runtime.Serialization.Json;
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
var person = new Person { Name = "Tom", Age = 20 };
var stream = new MemoryStream();
var serializer = new DataContractJsonSerializer(typeof(Person));
serializer.WriteObject(stream, person);
string json = System.Text.Encoding.UTF8.GetString(stream.ToArray());
Console.WriteLine(json);
}
}
在上面的代码中,我们使用MemoryStream来将序列化后的JSON格式文本流保存在内存中。通过DataContractJsonSerializer类型的WriteObject方法可以将对象序列化为JSON格式的文本流。
总结
本文详细介绍了C#中的序列化和反序列化概念、原理和常见用法。在开发应用程序时序列化和反序列化是一项重要的任务,希望本文能给大家带来一些启发和指导。
以上就是本文的全部内容,希望能为您提供到帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解C#序列化与反序列化的详解 - Python技术站