版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前言最近有一些学员问到了一些关于序列化的问题,今天这篇文章,跟大家分享一下在C#开发中,常用的三种序列化的方式。很多小伙伴一提到序列化,都会想到二进制序列化,但其实序列化并不仅仅只是二进制序列化,我们常说的对象序列化有三种方式,分别是二进制序列化、XML序列化及JSON序列化,这三种方式各有各自的优势和不足,实际应用中,大家自己根据实际情况,选择适合的。准备在实现之前,先要做一些准备工作,序列化其实是对象和字符串(文件)之间的互相转换,所以首先我们准备好一个实体类,很简单的Student类:
publicclassStudent
{
publicintStudentId
{
get;
set;
}
publicstringStudentName
{
get;
set;
}
publicstringClassName
{
get;
set;
}
publicoverridestring
ToString()
{
return
StudentId
+
";"
+
StudentName
+
";"
+
ClassName;
}
}这里我重写了ToString方法,便于后续测试时,直观地看到对象的值是否正确。同时我们准备好一个Student对象,后面就一直要对它进行操作了。
classProgram
{
staticvoidMain(string[]
args)
{
Studentstudent
=
new
Student()
{
StudentId
=
10001,
StudentName
=
"小华",
ClassName
=
"软件一班"
};
}
}二进制二进制序列化及反序列化的方式主要是使用BinaryFormatter这个类,序列化代码如下:
BinaryFormatterserializer
=
newBinaryFormatter();
MemoryStreammemStream
=
newMemoryStream();
serializer.Serialize(memStream,
student);
memStream.Close();
stringinfo
=
Encoding.Unicode.GetString(memStream.ToArray());
Console.WriteLine("二进制序列化结果:");
Console.WriteLine(Environment.NewLine);
Console.WriteLine(info);
Console.WriteLine(Environment.NewLine);反序列化代码如下:
memStream
=
newMemoryStream(Encoding.Unicode.GetBytes(info));
student
=
(Student)serializer.Deserialize(memStream);
memStream.Close();
Console.WriteLine("二进制反序列化结果:");
Console.WriteLine(Environment.NewLine);
Console.WriteLine(student.ToString());
Console.WriteLine(Environment.NewLine);最终执行结果如下:我们可以看到二进制序列化的结果是一串乱码,但是我们可以通过反序列化的方式,拿到转换之后的结果。这种方式使用起来比较简单,甚至还有加密的作用,但是也有一些不足:类名上面要加上[Serializable],不加无法序列化
[Serializable]
publicclassStudent
{
publicintStudentId
{
get;
set;
}
publicstringStudentName
{
get;
set;
}
publicstringClassName
{
get;
set;
}
publicoverridestring
ToString()
{
return
StudentId
+
";"
+
StudentName
+
";"
+
ClassName;
}
}序列化的结果非常大,使用System.Text.Encoding.UTF8.GetString(bytes)查看下,发现数据量很大。序列化对象需要完全一致,连命名空间都要相同。XMLXML序列化可提高可读性,以及对象共享和使用的灵活性,XML序列化将对象的公共字段和属性或方法的参数和返回值序列化成符合特定XML格式的流。XML序列化代码如下:
XmlWriterSettingsxmlSettings
=
newXmlWriterSettings();
xmlSettings.OmitXmlDeclaration
=
true;
xmlSettings.Encoding
=
newSystem.Text.UTF8Encoding(false);
MemoryStreamstream
=
newMemoryStream();
XmlWriterxmlwriter
=
XmlWriter.Create(stream,
xmlSettings);
XmlSerializerNamespacesxmlns
=
newXmlSerializerNamespaces();
xmlns.Add(String.Empty,
String.Empty);
XmlSerializerser
=
newXmlSerializer(typeof(Student));
ser.Serialize(xmlwriter,
student,
xmlns);
stringinfo
=
Encoding.UTF8.GetString(stream.ToArray());
Console.WriteLine("XML序列化结果:");
Console.WriteLine(Environment.NewLine);
Console.WriteLine(info);
Console.WriteLine(Environment.NewLine);XML反序列化代码如下:
XmlReaderxmlReader
=
XmlReader.Create(newStringReader(info),
newXmlReaderSettings());
student
=
(Student)newXmlSerializer(typeof(Student)).Deserialize(xmlReader);
Console.WriteLine("XML反序列化结果:");
Console.WriteLine(Environment.NewLine);
Console.WriteLine(student.ToString());
Console.WriteLine(Environment.NewLine);最终执行结果如下:我们可以直观地看到XML序列化的结果,可读性增强了很多,但是XML有它自身的不足之处。JSONJSON序列化是目前使用很多的一种方式,实现JSON序列化的方式也有很多,我一般会使用NewSoft.Json这个库来做,可以通过Nuget搜索安装。JSON序列化代码如下:
stringinfo
=
JsonConvert.SerializeObject(student);
Console.WriteLine("JSON序列化结果:"
+
Environment.NewLine);
Console.WriteLine(info);
Console.WriteLine(Environment.NewLine);JSON反序列化代码如下:
student
=
(Student)JsonConvert.DeserializeObject(info,
typeof(Student));
Conso
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 隋朝的统一中国历史上的重要篇章
- 初中数学北师大版教学研究
- 北师大三年级下册书法教学心得
- 北师大版百分数应用四教学设计全解析深度解读
- 北师大语文剃头匠的艺术价值
- 分数与混合运算的奇妙世界
- 虞美人高二选修课的风华之选
- 一年级数学人教版教案设计
- 哺乳类动物的宠物救助成功案例
- 2024年LORAN-E电子探空仪项目合作计划书
- 物流基础(中职)PPT完整全套教学课件
- 中国式现代化的重要特征1000字
- 医保申诉书格式和范文(3篇)-1
- 2023年太原铁路局招聘笔试参考题库附带答案详解
- 统编小学四年级上册道德与法治教学计划及进度表
- 餐饮业礼仪标准
- 药剂科岗位廉政管理制度
- 跨境电子商务课件邮政小包运费计算
- 提高地下通道混凝土结构防水效果QC小组
- 地铁车站出入口矩形顶管专项施工方案
- 新人教版六年级上册数学(新插图)3 分数的混合运算 教学课件
评论
0/150
提交评论