当前位置:  编程技术>.net/c#/asp.net

C#序列化成XML注意细节

    来源: 互联网  发布时间:2014-10-15

    本文导语:  最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成xml文件. 假如有如下一个类 代码如下: class Arwen { private Hashtable table = new Hashtable(); private TimeSpan time = new TimeSpan(0, 0, 1); public Hashtable Table { get { return t...

最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成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把Hastable中所有信息保存起来.此时List是可以被序列化的. 这显然是个非常麻烦也非常笨的办法.不过貌似没更好的办法啊.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#获取硬盘序列号,CPU序列号,网卡MAC地址的源码
  • c#序列化和反序列化Json的方法
  • C#中datatable序列化与反序列化实例分析
  • C#获得MAC地址(网卡序列号)的实现代码
  • c#泛型序列化对象为字节数组的示例
  • C#获取cpu序列号、硬盘ID、网卡MAC地址的实现代码
  • c#数据的序列化和反序列化(推荐版)
  • C#实现json的序列化和反序列化实例代码
  • C#实现复杂XML的序列化与反序列化
  • C#序列化与反序列化的实例详解
  • C# 三种序列化方法分享
  • 深入理解C#序列化与反序列化的详解
  • c#保存窗口位置大小操作类(序列化和文件读写功能)
  • c#正反序列化XML文件示例(xml序列化)
  • c#序列化实例详解
  • c#对象反序列化与对象序列化示例详解
  • C#实现简单的JSON序列化功能代码实例
  • c#序列化详解示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • 有读机器序列号或者主板序列号或者CPU序列号的命令吗??函数也可以啊???哎。。。。。
  • java将类序列化并存储到mysql(使用hibernate)
  • 序列化反序列化库 RedCell
  • java序列化实现Serializable接口
  • 在Linux下用c编程怎么获取网卡序列号和硬盘序列号?
  • 对象序列化--存储数据库的方法 序列化后 不能使用
  • 我下了jb6可是没有序列号,请问哪位看官有序列号,千恩万谢
  • 求jb5新的序列号?就的序列号不能用了,快帮我呀
  • 各位大哥,Linux下怎么读硬盘序列号和网卡序列号,100
  • java 基本类型或可序列化类型,这里说的可序列化类型是什么意思???具体都有哪些类型??谢谢
  • C序列化或反序列化库 tpl
  • .net实现序列化与反序列化实例解析
  • 使用XmlSerializer序列化List对象成XML格式(list对象序列化)
  • java序列化和java反序列化示例
  • Java对象序列化和反序列化工具 Xson
  • 轻量级的序列化/反序列化工具 XBlink
  • Java 序列化库 JID
  • 怎么给软件加序列号?
  • 求助!急(关于硬盘序列号的修改)
  • 关于object序列化的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3