手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#序列化成XML注意细节
C#序列化成XML注意细节
摘要:最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成xml文件.假如有如下一个类复制代码代码如下:classArwen{p...

最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成xml文件.

假如有如下一个类

复制代码 代码如下:

class Arwen

{

private Hashtable table = new Hashtable();

private TimeSpan time = new TimeSpan(0, 0, 1);

public Hashtable Table

{

get { return table; }

set { table = value; }

}

public TimeSpan Time

{

get { return time; }

set { time = value; }

}

public string Name { get; set;}

}

如果你把上面的类Arwen序列化成二进制是一点问题都没有.只在在前面用加个[Serializable]就行.另外如果类中还有字段或属性是类的话也要在那个类相应的类定义前面加[Serializable].如果类中的某个字段或属性不想被序列化只在在它前面加[NonSerialized]即可. 序列化成二进制相当于把所有信息原封不动保存到二进制文件中.不管是private字段还是public的.也不管是啥类型的

而序列化成xml则相较序列化成二进制受到很多限制,主要有三个.

1是只能序列化public的字段或属性.

2是有些类型是不能序列化.比如上面的Hastable和TimeSpan这样的类型.

3是类中必须有无参的构造函数才能被序列化成xml.

那如果你实在想保存Hastable和TimeSpan这样类型的信息时咋整啊?

那只能曲线救国了啊.中间做个转换,先把Hastable 和Timespan转换成其他类型.然后序列化成xml,反序列化回来的时候再转换下.那也意味你要在原来的类中添加某个类型.比如新弄一个类pairs,有两字段,对应Hastable的键值对,然后用个List<pairs>把Hastable中所有信息保存起来.此时List<pairs>是可以被序列化的. 这显然是个非常麻烦也非常笨的办法.不过貌似没更好的办法啊.TimeSpan反正就可以先转换成string类型了.

下面只说下xml转换的简单用法.像上面说的Hashtable等类型不能被序列化,那可以用个特性让其显式声明为不可被序列化.用[XmlIgnoreAttribute]即可

复制代码 代码如下:

using System.Xml.Serialization;

using System.IO;

class Arwen

{

private Hashtable table = new Hashtable();

private TimeSpan time = new TimeSpan(0, 0, 1);

public Arwen()

{

}

[XmlIgnoreAttribute]

public Hashtable Table

{

get { return table; }

set { table = value; }

}

[XmlIgnoreAttribute]

public TimeSpan Time

{

get { return time; }

set { time = value; }

}

}

Arwen weiwen = new Arwen();

weiwen.Time = new TimeSpan(1,2,3); // 1 hours , 2 minutes, 3 seconds

weiwen.Table.Add("arwen", 250);

string filename = @"c:temparwen.xml";

XmlSerializer xs = new XmlSerializer(typeof(Arwen));

using (FileStream file = new FileStream(filename, FileMode.Create))

xs.Serialize(file, sa);

【C#序列化成XML注意细节】相关文章:

c#.net 常用函数和方法集

C#生成注册码的实例代码

C# 对XML基本操作代码总结

c# 以二进制读取文本文件

C#垃圾回收机制的详细介绍

C#线程池用法详细介绍

C# DataSet的内容写成XML时如何格式化字段数据

C# 泛型数组学习小结

简介C#读取XML的两种方式

C#数组应用分析第1/2页

精品推荐
分类导航