. 什么是序列化和反序列化
序列化(Serialization)指将对象转化为可以存储或传输的格式的过程。在此过程中,对象中的属性值被提取并打包为一组二进制数据,可以被序列化为XML、JSON、二进制等格式。在.NET中,序列化包含了 Binary serialization,XML serialization和 JSON serialization几种方式。
反序列化(Deserialization) 将序列化后的数据还原为原始对象。 转换对象的数据类型,让电脑理解这些二进制,比如:将网络传输过来的数据转换成可以操作的对象
. 在.NET中进行二进制序列化与反序列化
二进制序列化(Serialization)是将.NET中的数据类型序列化为二进制流,方便在网络上传输或者保存到磁盘文件之中。 序列化的实现,需要使用.NET框架中提供的 BinaryFormatter,代码实现如下:
[Serializable]
public class Student {
public string Name { get; set; }
public int Age { get; set; }
}
var john = new Student { Name = "John Doe", Age = 18 };
using (var stream = new MemoryStream()) {
var formatter = new BinaryFormatter();
formatter.Serialize(stream, john);
byte[] serialized = stream.ToArray();
}
反序列化(Deserialization)即是将二进制流反序列化成具体的数据类型。 也需要使用.NET内置的BinaryFormatter,代码如下:
using (var stream = new MemoryStream(serialized)) {
var formatter = new BinaryFormatter();
var deserialized = (Student)formatter.Deserialize(stream);
}
以上就是一个完整的序列化和反序列化示例,包括对象类型的定义、序列化过程和反序列化过程。这两个过程的代码需要在同一个工程中编写。
. 在.NET中进行XML序列化与反序列化
XML序列化(Serialization)用于将.NET中的对象序列化为XML格式,XML作为一种通用的数据交换格式,可以快速实现不同平台、不同编程语言之间的数据交换。 在.NET中,使用XmlSerializer类来实现对象到XML的序列化。示例如下:
public class Student {
public string Name { get; set; }
public int Age { get; set; }
}
var john = new Student { Name = "John Doe", Age = 18 };
var serializer = new XmlSerializer(typeof(Student));
using (var writer = new StringWriter(new StringBuilder())) {
serializer.Serialize(writer, john);
string xml = writer.ToString();
}
XML序列化后的结果如下:
<?xml version="1.0" encoding="utf-16"?>
<Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>John Doe</Name>
<Age>18</Age>
</Student>
XML中含有额外的元数据,包括XML声明和根元素。而使用XmlSerializer时可以通过指定XmlSerializer构造函数的第二个参数XmlSerializerNamespaces的实例,以移除额外的元素。
var serializer = new XmlSerializer(typeof(Student));
var namespaces = new XmlSerializerNamespaces(new XmlQualifiedName[] { new XmlQualifiedName("", "") });
using (var writer = new StringWriter(new StringBuilder())) {
serializer.Serialize(writer, john, namespaces);
string xml = writer.ToString();
}
反序列化(Deserialization)需要使用XmlSerializer类的Deserialize方法,示例如下:
using (var reader = new StringReader(xml)) {
var serializer = new XmlSerializer(typeof(Student));
var deserialized = (Student)serializer.Deserialize(reader);
}
以上就是一个完整的XML序列化和反序列化示例。
总结:
从以上两个示例可以看出,使用不同的序列化类型,序列化的数据格式也不同,二者作用及使用场景都不一样,需要根据需求选择合适的序列化类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net的序列化与反序列化实例 - Python技术站