Csharp/C#教程:C#序列化成XML注意细节分享

最常用的序列化是把某个类序列化成二进制文件.但有时我们也会把类序列化成xml文件.
假如有如下一个类
代码如下:
classArwen
{
privateHashtabletable=newHashtable();
privateTimeSpantime=newTimeSpan(0,0,1);
publicHashtableTable
{
get{returntable;}
set{table=value;}
}
publicTimeSpanTime
{
get{returntime;}
set{time=value;}
}
publicstringName{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]即可
代码如下:
usingSystem.Xml.Serialization;
usingSystem.IO;
classArwen
{
privateHashtabletable=newHashtable();
privateTimeSpantime=newTimeSpan(0,0,1);
publicArwen()
{
}
[XmlIgnoreAttribute]
publicHashtableTable
{
get{returntable;}
set{table=value;}
}
[XmlIgnoreAttribute]
publicTimeSpanTime
{
get{returntime;}
set{time=value;}
}
}
Arwenweiwen=newArwen();
weiwen.Time=newTimeSpan(1,2,3);//1hours,2minutes,3seconds
weiwen.Table.Add(“arwen”,250);
stringfilename=@”c:temparwen.xml”;
XmlSerializerxs=newXmlSerializer(typeof(Arwen));
using(FileStreamfile=newFileStream(filename,FileMode.Create))
xs.Serialize(file,sa);
您可能感兴趣的文章:C#XML操作代码大全(读XML,写XML,更新,删除节点,与dataset结合等)C#对XML文件的各种操作实现方法C#对象与XMl文件之间的相互转换C#写入XML文档三种方法详细介绍C#实现复杂XML的序列化与反序列化C#XML与Json之间相互转换实例详解C#生成XML的三种途径小结操作XML文档遇到的XMLNS问题及解决方法(C#和PHP)c#读取xml文件到datagridview实例C#读取XML中元素和属性值的实现代码C#读取xml节点数据方法小结C#实现对象XML序列化的方法C#使用xsd文件验证XML格式是否正确的实现方法

标签: 序列化

c语言打印输出双引号的方法示例

c语言计算三角形面积代码

上述就是C#学习教程:C#序列化成XML注意细节分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

www.ctvol.com true Article Csharp/C#教程:C#序列化成XML注意细节分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/904359.html

(0)
上一篇 2021年10月21日 下午6:26
下一篇 2021年10月21日 下午6:28

精彩推荐