c#中序列化是什么,怎么用,什么情况下用,不用有什么后果?

详细描述序列化

c#中序列化就是把一个对象保存到一个文件或数据库字段中去。

序列化用途:

1、在进程下次启动时读取上次保存的对象的信息

2、在不同的AppDomain或进程之间传递数据

3、在分布式应用系统中传递数据

常见的序列化的方法:

1、BinaryFormatter

2、SoapFormatter

3、XML序列化

用法:

  BinaryFormatter的用法大致如下: 

//BinaryFormatter将对象序列化到文件中
 List<string> inputList = new List<string>() { "str1","str2","str3"};
 using (FileStream fsWriter = new FileStream(@"tmp.dat",FileMode.Create,FileAccess.Write))
 {
       BinaryFormatter bf = new BinaryFormatter();
       //序列化
       bf.Serialize(fsWriter, inputList);
 }

 //BinaryFormatter将文件中的数据反序列化出来
 List<string> outputList = new List<string>();
 using (FileStream fsReader = new FileStream(@"tmp.dat",FileMode.Open,FileAccess.Read))
 {
       BinaryFormatter bf = new BinaryFormatter();
       //反序列化
       outputList = (List<string>)bf.Deserialize(fsReader);
 }

XML序列化的用法大致如下:

//xml序列化到tmp.xml文件中
List<string> inputList = new List<string>() { "str1","str2"};
using (FileStream fsWriter = new FileStream(@"tmp.xml",FileMode.Create,FileAccess.Write))
{
      XmlSerializer xs = new XmlSerializer(typeof(List<string>));
      xs.Serialize(fsWriter, inputList);
}

//从tmp.xml文件中反序列化出来
List<string> outputList = new List<string>();
using (FileStream fsReader = new FileStream(@"tmp.xml",FileMode.Open,FileAccess.Read))
{
     XmlSerializer xs = new XmlSerializer(typeof(List<string>));
     outputList = xs.Deserialize(fsReader) as List<string>;
}

总结:

 

两个的用法大致如下:

 

序列化:

  1.得到一个存储对象的类型

  2.创建一个写入文件流

  3.定义要序列化的类型

  4.调用序列化方法

 

反序列化:

  1.定义一个装载对象的类型

  2.创建一个读出文件流

  3.定义要反序列化的类型

  4.调用反序列化方法

 

BinaryFormatter类进行序列化和反序列化,以缩略型二进制格式写到一个文件中去,速度比较快,而且写入后的文件已二进制保存有一定的保密效果。标记为NonSerialized的其他所有成员都能序列化。

 

采用xml序列化的方式只能保存public的字段和可读写的属性,对于private等类型的字段不能进行序列化。

 

二进制序列化的优点: 

  1. 所有的类成员(包括只读的)都可以被序列化;

  2. 性能非常好。

 

XML序列化的优点:

  1. 互操作性好;

  2. 不需要严格的二进制依赖;

  3. 可读性强

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-29
序列化(Serialization)是.NET平台的特性之一。
1、为什么要序列化:
首先你应该明白系列化的目的就不难理解他了。系列化的目的就是能在网络上传输对象,否则就无法实现面向对象的分布式计算。比如你的客户端要调用服务器上的一个方法获得一个产品对象,比如方法为:public Product findProduct(int product_id);
注意该方法返回一个Product对象,如果没有系列化技术,客户端就收不到返回的对象Product。而序列化的实现就是把对象变成一个可在网络上传输的字节流。

2、利用序列化技术,可以实现对象的备份和还原。序列化可以将内存中的对象(或对象图)序列化为数据流,并保存到磁盘上进行持久化;还可以将数据流反序列化为对象,实现对象的还原。序列化技术在分布式系统的数据传输中得到充分的利用,如:XML Web Service 利用XML序列化实现跨平台,.NET Remoting 则用到了二进制序列化和SOAP序列化。

.NET Compact Framework 2.0 支持XML序列化,不支持二进制序列化和SOAP序列化。而 .NET Compact Framework 1.0 连XML序列化都不支持。不过 OpenNETCF 1.x 为 .NET CF 1.0 实现了一个XML序列化的类,这个类在 OpenNETCF.Xml.dll 程序集中可以找到。

序列化和反序列化用于将一个对象保存到文件,和从文件读取。
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable()]//可以序列化的类需要用这个属性标记
public class ToBeSerialized
{
public int a;
public string b;
public ToBeSerialized(int a,string b)
{
this.a=a;
this.b=b;
}
}
public class Test
{

public void Serialize()//序列化
{
ToBeSerialized tbs = new ToBeSerialized(22,"SOM");
Stream fs = File.Create("Serialized.txt");
BinaryFormatter serializer = new BinaryFormatter();
serializer.Serialize(fs, tbs);
fs.Close();
}
public void DeSerialize()//反序列化
{
ToBeSerialized restore;
Stream fs = File.OpenRead("Serialized.txt");
BinaryFormatter deserializer = new BinaryFormatter();
restore = (ToBeSerialized)(deserializer.Deserialize(fs));//反序列化得到的对象
fs.Close();
}
}呵呵。。我找的(别人弄的)虽然我表达不是很好,但是我会用这东东
第2个回答  2013-03-29
序列化是将类型,如people类,转换为二进制编码的字节数组。便于在网络中传输。通常是在通信,或者WCF中使用,使用起来非常简单,也可以序列化为XML,在网络中传输
相似回答