C# 的三种序列化方法

  序列化是将一个对象转换成字节流以达到将其长期保存在内存、数据库或文件中的处理过程。它的主要目的是保存对象的状态以便以后需要的时候使用。与其相反的过程叫做反序列化。

  序列化一个对象

  为了序列化一个对象,我们需要一个被序列化的对象,一个容纳被序列化了的对象的(字节)流和一个格式化器。进行序列化之前我们先看看System.Runtime.Serialization名字空间。ISerializable接口允许我们使任何类成为可序列化的类。

  如果我们给自己写的类标识[Serializable]特性,我们就能将这些类序列化。除非类的成员标记了[NonSerializable],序列化会将类中的所有成员都序列化。

  序列化的类型

二进制(流)序列化

SOAP序列化

XML序列化

  二进制(流)序列化:

  二进制(流)序列化是一种将数据写到输出流,以使它能够用来自动重构成相应对象的机制。二进制,其名字就暗示它的必要信息是保存在存储介质上,而这些必要信息要求创建一个对象的精确的二进制副本。在二进制(流)序列化中,整个对象的状态都被保存起来,而XML序列化只有部分数据被保存起来。为了使用序列化,我们需要引入System.Runtime.Serialization.Formatters.Binary名字空间. 下面的代码使用BinaryFormatter类序列化.NET中的string类型的对象。

using System;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary; namespace SerializationTest{    class Program    {        static void Main(string[] args)        {            //Serialization of String Object                     string strobj = "test string for serialization";            FileStream stream = new FileStream("C:\StrObj.txt", FileMode.Create, FileAccess.Write ,            FileShare.None);            BinaryFormatter formatter = new BinaryFormatter();            formatter.Serialize(stream, strobj);            stream.Close();             //Deserialization of String Object            FileStream readstream = new FileStream("C:\StrObj.txt", FileMode.Open , FileAccess.Read ,            FileShare.Read );            string readdata = (string)formatter.Deserialize(readstream);            readstream.Close();            Console.WriteLine(readdata);            Console.ReadLine();         }    }}

登录后复制

 SOAP序列化:

  SOAP协议是一个在异构的应用程序之间进行信息交互的理想的选择。我们需要在应用程序中添加System.Runtime.Serialization.Formatters.Soap名字空间以便在.Net中使用SOAP序列化。SOAP序列化的主要优势在于可移植性。SoapFormatter把对象序列化成SOAP消息或解析SOAP消息并重构被序列化的对象。下面的代码在.Net中使用SoapFormatter类序列化string类的对象。

using System;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Soap ; namespace SerializationTest {    class Program    {        static void Main(string[] args)        {            //Serialization of String Object                       string strobj = "test string for serialization";            FileStream stream = new FileStream("C:\StrObj.txt", FileMode.Create, FileAccess.Write ,            FileShare.None);            SoapFormatter formatter = new SoapFormatter();            formatter.Serialize(stream, strobj);            stream.Close();            //Deserialization of String Object            FileStream readstream = new FileStream("C:\StrObj.txt", FileMode.Open , FileAccess.Read ,            FileShare.Read );            string readdata = (string)formatter.Deserialize(readstream);            readstream.Close();            Console.WriteLine(readdata);            Console.ReadLine();        }    }}

登录后复制

XML序列化:

  根据MSDN的描述,“XML序列化将一个对象或参数的公开字段和属性以及方法的返回值转换(序列化)成遵循XSD文档标准的XML流。因为XML是一个开放的标准,XML能被任何需要的程序处理,而不管在什么平台下,因此XML序列化被用到带有公开的属性和字段的强类型类中,它的这些发生和字段被转换成序列化的格式(在这里是XML)存储或传输。”

  我们必须添加System.XML.Serialization引用以使用XML序列化。使用XML序列化的基础是XmlSerializer。下面的代码是在.Net中使用XmlSerializer类序列化string对象。

using System;using System.IO;using System.Xml.Serialization;  namespace SerializationTest{    class Program    {        static void Main(string[] args)        {            //Serialization of String Object                       string strobj = "test string for serialization";            FileStream stream = new FileStream("C:\StrObj.txt", FileMode.Create, FileAccess.Write ,            FileShare.None);            XmlSerializer  xmlserializer = new XmlSerializer(typeof(string));            xmlserializer.Serialize(stream, strobj);            stream.Close();             //Deserialization of String Object            FileStream readstream = new FileStream("C:\StrObj.txt", FileMode.Open , FileAccess.Read ,            FileShare.Read );            string readdata = (string)xmlserializer.Deserialize(readstream);            readstream.Close();            Console.WriteLine(readdata);            Console.ReadLine();         }    }}

登录后复制

什么是格式化器?

  一个格式化器用来确定一个对象的序列格式。它们目的是在网络上传输一个对象之前将其序列化成合适的格式。它们提供IFormatter接口。在.NET里提供了两个格式化类:BinaryFormatter和SoapFormatter,它们都继承了IFormatter接口。

  使用序列化

  序列化允许开发人员保存一个对象的状态并在需要的时候重构对象,同时很好地支持对象存储和数据交换。通过序列化,开发人员可以利用Web Service发送对象到远端应用程序,从一个域传输对象到另一个域,以XML的格式传输一个对象并能通过防火墙,或者在应用程序间保持安全性或用户特定信息等等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2445602.html

(0)
上一篇 2025年3月3日 16:09:02
下一篇 2025年2月23日 14:47:33

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 理解模型,视图和控制器(C#,asp.net)

     这篇文章向你提供asp.net mvc 模型,视图和控制的高度概览。换句话说,解释一下asp.net mvc中的 ‘m’, ‘v’, 和 ‘c’。   看完这篇文章以后,你应该就能理解ASP.NET MVC的不同部分是如何共同工作的。而且…

    2025年3月3日 编程技术
    200
  • 能让你成为更优秀程序员的10个C语言资源

    一些人觉得编程无聊,一些人觉得它很好玩。但每个程序员都必须紧跟编程语言的潮流。大多数程序员都是从c开始学习编程的,因为c是用来写操作系统、应用程序最常用的语言。 C编程笔记 这些是华盛顿实验学院C编程入门课的部分笔记。它们是以《C程序设计语…

    编程技术 2025年3月3日
    200
  • C语言快速学习与入门指南

    有人认为,现在是java和.net的时代,有谁还需要c以及汇编呢?孰不知,java和.net是建立在软件之上的,是为了垄断市场而建立起来的体系,犹如挖好一个金壁辉煌的坑,请你往下跳,还自以为站在巨人的肩膀上,事实上成了坑底之蛙。要成为一个真…

    编程技术 2025年3月3日
    200
  • C#程序员经常用到的10个实用代码片段

     1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion;Console.WriteLine(“Platform: {0}”, os.Platform);Conso…

    编程技术 2025年3月3日
    200
  • C++中内存泄漏的检测

    首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复。 最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck,功能非常强大,相信做C++开发的人都离不开它。此外就是不首先我们需要知道…

    编程技术 2025年3月3日
    200
  • C#泛型方法解析

        c#2.0引入了泛型这个特性,由于泛型的引入,在一定程度上极大的增强了c#的生命力,可以完成c#1.0时需要编写复杂代码才可以完成的一些功能。但是作为开发者,对于泛型可谓是又爱又恨,爱的是其强大的功能,以及该特性带来的效率的提升,恨…

    编程技术 2025年3月3日
    200
  • C#性能优化

    性能是考量一个软件产品好坏的重要指标,与产品的功能有着同等重要的地位。用户在选择一款软件产品的时候基本都会亲身试验比较同类产品的性能。作为选购那个软件重要因素之一。 软件的性能指什么1.降级内存消耗 在软件开发中,内存消耗一般作为次要的考虑…

    编程技术 2025年3月3日
    200
  • C#灵活使用类的方法分享

    本文主要介绍了c# 灵活使用类的方法,具有很好的参考价值,下面跟着小编一起来看下吧 构造函数 概括:构造函数是类中的一种特殊的方法,主要完成对象的初始化工作,在创建对象的时候完成指定的工作。而且构造函数方法名和类名相同,没有返回值类型。 无…

    编程技术 2025年3月3日
    200
  • 详解C#读写XML的示例代码

    本文主要介绍了c# 读写xml的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧 读XML XmlDocument xd = new XmlDocument();       string fileName = @”D:est.xml…

    编程技术 2025年3月3日
    200
  • C#泛型类型的详细介绍

    这篇文章主要介绍c#泛型类型,非常不错,具有参考借鉴价值,需要的朋友可以参考下 上篇文章给大家介绍了浅析C# 中的类型系统(值类型和引用类型),接下来通过本文给大家介绍下c# 泛型类型, 说下C#中的泛型,熟练地使用泛型能提高代码的重用性,…

    2025年3月3日
    200

发表回复

登录后才能评论