C#序列化成XML注意细节_C#教程

最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成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);

时间: 2024-09-11 12:24:35

C#序列化成XML注意细节_C#教程的相关文章

LINQ生成XML格式数据与C#序列化成XML实例

LINQ生成XML格式数据  代码如下 复制代码 using System.Xml.Linq; static void Main(string[] args)         {             //LINQ生成XML格式的数据,相比较把对象序列化成XML文件要灵活性好点using System.Xml.Linq;             List<Student> list = new List<Student>             {                

C# LINQ to XML应用介绍_C#教程

W3C制定了XML DOM标准,.Net为了支持W3C的标准,从1.1版本开始就引入了XmlDocument类.我在前一篇博客中,介绍了如何使用XmlDocument类来对XML文档进行操作.后来 .Net又引入了LINQ,于是LINQ to XML也就应运而生,所以在.Net中,不仅可以用W3C XML DOM标准,还可以使用LINQ to XML来操作XML文档.下面就来简单介绍一下如何使用LINQ to XML. (一) 加载 加载XML比较常用的有三种方法: 复制代码 代码如下: pub

用C#把文件转换为XML的代码_C#教程

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.IO; using System.Xml;  namespace MyWindows { /**//// <summary> /// 这个示例演示如何把Office文件编码为xml文件以及如何把生成的xml文件转换成Office文件

c#下注册表操作的一个小细节_C#教程

先看一个有错误的代码: string subKeyName = @"Software\Microsoft\Windows\CurrentVersion\Run\"; //subkey name string valueName = @"App Name"; //name of the more specific key that will hold the value, "" means (Default) try ...{ RegistryKe

以读取博客园随笔备份为例 将xml 序列化成json,再序列化成对象

本文转载:本文转载:http://www.cnblogs.com/codealone/archive/2013/04/14/3020161.html 在线JOSN编辑器http://tools.jb51.net/tools/json/json_editor.htm 非常强大! 资源下载:http://files.cnblogs.com/codealone/ConsoleApplication2.zip Json查看工具:http://files.cnblogs.com/codealone/Jso

从 VBA 中使用 Visual Basic .NET 将 Word 文档序列化为 XML

visual|word|xml 从 VBA 中使用 Visual Basic .NET 将 Word 文档序列化为 XML Michael CorningMicrosoft Corporation 2002年10月 适用于:   Microsoft Word 2002   Microsoft Visual Studio .NET 摘要:学习如何在 Microsoft Office Visual Basic for Applications (VBA) 程序中利用 .NET 代码将大型 Word

将SerializableAttribute序列化为xml

从这个例子中,你可以知道: 1,如何将stream转化为string 2,如何将searializableAttribute属性序列化为xml   有MetadataObject定义为:   /// <remarks/> [System.Xml.Serialization.XmlIncludeAttribute(typeof(ActionParameter))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(Action))] [Sy

[C#]将一个类序列化为XML

在C#中要想将一个类序列化为XML,则使用XmlSerializer类:   XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder)); TextWriter writer = new StreamWriter(filename); PurchaseOrder po=new PurchaseOrder();// Serialize the purchase order, and close the TextWriter

XML动态菜单flash教程

大家都喜欢XML,因为它省事,我平时做东西也尽可能的用XML,因为实在是日后更新修改太方便了,都不用动fla源文件. 本XML系列教程将分三部分发布,到最后一期我们将拥有一个功能全面,更加友好的XML菜单.本教程这个第一期涉及到了一些XML的基础知识. 这里我们要做的效果是一个纵向排列的动态XML的菜单,并且当鼠标滑动到菜单上显示相应的缩略图,这个我们在很多摄影作品展示flash网站经常见到的.在线展示:http://www.keyframe1.com/tute/xmlMenu/ 第一步, 分析