-
直接贴代码: 复制代码 代码如下: public class
最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成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:\temp\arwen.xml";
XmlSerializer xs = new XmlSerializer(typeof(Arwen));
using (FileStream file = new FileStream(filename, FileMode.Create))
xs.Serialize(file, sa);
假如有如下一个类
复制代码 代码如下:
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:\temp\arwen.xml";
XmlSerializer xs = new XmlSerializer(typeof(Arwen));
using (FileStream file = new FileStream(filename, FileMode.Create))
xs.Serialize(file, sa);
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式