Csharp/C#教程:C#序列化与反序列化(Serialize,Deserialize)实例详解分享

本文实例讲述了C#序列化与反序列化(Serialize,Deserialize)实现方法。分享给大家供大家参考。具体分析如下:

如果要保存运行程序过程的数据要么保存到数据库中,要么新建一个普通的文件,然后把数据保存进去.但是这两者有个缺点就是,不能把原有数据的结构也保存进去.比如一个类中的字段值保存进去后再读取出来必须再解析下才行.序列化技术让你省去了解析的过程.保存后再读取时直接得到一个class

序列化的方式有三种:BinaryFormatter,SoapFormatter,XmlSerializer

1.BinaryFormatter

保存成二进制数据流.用法示例:

usingSystem.IO; usingSystem.Runtime.Serialization.Formatters.Binary; [Serializable] //如果要想保存某个class中的字段,必须在class前面加个这样attribute(C#里面用中括号括起来的标志符) publicclassPerson { publicintage; publicstringname; [NonSerialized]//如果某个字段不想被保存,则加个这样的标志 publicstringsecret; }

序列化:

classProgram { staticvoidMain(string[]args) { Personperson=newPerson(); person.age=18; person.name="tom"; person.secret="iwillnottellyou"; FileStreamstream=newFileStream(@"c:tempperson.dat",FileMode.Create); BinaryFormatterbFormat=newBinaryFormatter(); bFormat.Serialize(stream,person); stream.Close(); }

反序列化:

classProgram { staticvoidMain(string[]args) { Personperson=newPerson(); FileStreamstream=newFileStream(@"c:tempperson.dat",FileMode.Open); BinaryFormatterbFormat=newBinaryFormatter(); person=(Person)bFormat.Deserialize(stream); //反序列化得到的是一个object对象.必须做下类型转换 stream.Close(); Console.WriteLine(person.age+person.name+person.secret); //结果为18tom.因为secret没有有被序列化. }

2.SoapFormatter

把数据保存成xml文件.里面除了保存的内容还有些额外的Soap信息.它的用法和BinaryFormatter一样.只要把BinaryFormatter都替换成SoapFormatter就行.

把文件名改为person.xml

另外就是添加名称空间:usingSystem.Runtime.Serialization.Formatters.Soap;
这个名称空调对就的程序集有时VS没有自动引用.你必须手动去引用.选中project,右击选择AddReference.在.NET的标签下选择

System.Runtime.Serialization.Formatters.Soap.然后点OK.

补充:SOAP(SimpleObjectAccessProtocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encodingrules),用于表示应用程序需要使用的数据类型的实例;SOAPRPC表示(RPCrepresentation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。

3.XmlSerializer

也是保存成XML文件.但没有其他额外信息.另外它只能保存public类型的字段.而其他两种类型能保存所以类型的字段.
这里仍使用上面的Person类.

添加名称空间:

usingSystem.IO; usingSystem.Xml.Serialization;

序列化:

classProgram { staticvoidMain(string[]args) { Personperson=newPerson(); person.age=18; person.name="tom"; person.secret="iwillnottellyou"; FileStreamstream=newFileStream(@"c:tempxmlFormat.xml",FileMode.Create); XmlSerializerxmlserilize=newXmlSerializer(typeof(Person)); xmlserilize.Serialize(stream,person); stream.Close(); }

反序列化:

classProgram { staticvoidMain(string[]args) { Personperson=newPerson(); FileStreamstream=newFileStream(@"c:tempxmlFormat.xml",FileMode.Open); XmlSerializerxmlserilize=newXmlSerializer(typeof(Person)); person=(Person)xmlserilize.Deserialize(stream); stream.Close(); Console.WriteLine(person.age+person.name+person.secret); }

希望本文所述对大家的C#程序设计有所帮助。

您可能感兴趣的文章:C#中JavaScriptSerializer帮助类用法实例C#实现json的序列化和反序列化实例代码c#对象反序列化与对象序列化示例详解深入理解C#序列化与反序列化的详解C#实现复杂XML的序列化与反序列化C#中Serializable序列化实例详解C#中datatable序列化与反序列化实例分析c#数据的序列化和反序列化(推荐版)C#实现对象XML序列化的方法C#JavaScriptSerializer序列化时的时间处理详解

标签: 序列化 ali serialize al ia li

华为机试题之统计单词个数实例代码

c++ 快速排序算法【过程图解】

上述就是C#学习教程:C#序列化与反序列化(Serialize,Deserialize)实例详解分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/906519.html

(0)
上一篇 2021年10月23日
下一篇 2021年10月23日

精彩推荐