- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
泛型集合的序列化和反序列化
?? 泛型集合的序列化比较简单,和普通对象没有两样,但是.net FrameWork里面没有提供现成的API,这是一个我自己封装的一个方法,采用了object作为被序列化对象的参数类型,亦即可以接受任意类型的对象,并通过调用GetType方法获得被序列化对象的转换前的类型(或者说是被序列化对象的真正类型,object在c#里是所有对象的基类),牺牲了一点点类型转换带来的性能损失,但是带来了很好的封装性,易用性。我简单了做了个对比测试,写了一个以具体类型作为参数的序列化方法,(方法内代码一模一样),序列化一个简单对象,重复执行1万次,相差大概10毫秒级,只要你对性能要求不是特别苛刻,我觉得都适合采用。
/// summary
/// 序列化成xml字符串
/// /summary
/// param name=obj/param
/// returns序列化后的字符串/returns
public string Serialize(object obj)
{
XmlSerializer xs = new XmlSerializer(obj.GetType());
using (MemoryStream ms = new MemoryStream())
{
System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(ms, System.Text.Encoding.UTF8);
xtw.Formatting = System.Xml.Formatting.Indented;
xs.Serialize(xtw, obj);
ms.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(ms))
{
string str = sr.ReadToEnd();
xtw.Close();
ms.Close();
return str;
}
}
}
调用代码举例如下:
public class classA
{
public string name { get; set; }
public string address { get; set; }
}
…
ListclassA list = new ListclassA() { new classA() { name = 1, address = 2 }, new classA { name = 2, address = 3 } };
?
string s = Serialize(list);
s = Serialize(new classA() { name = 1, address = 2 });
?
2.?? 现在重点来说说集合对象的反序列化。翻遍了MSDN上关于序列化和反序列化的文章,都是长篇大论教你怎么序列化和反序列化一个对象,唯独没有讨论怎么序列化和反序列化集合对象的,
更别提泛型集合了。当我在xml文件里直接录入两个结构一模一样的节点时,IDE智能感应提示我xml文件里必须有而且是唯一的一个根节点,也就是说,如果你想反序列化一个对象数组,
如 classA[],你还必须得在xml文件里最外层节点套一个像root/root这样的根节点,反序列化以后得到root对象,通过读取这个root对象的属性才能得到这个对象数组,
有没有直接一点的办法呢?于是我调用前面写好的序列化方法,把一个集合对象序列化成字符串,得到的字符串形式如下ArrayOfClassAclassA../classA…/ ArrayOfClassA,
看到这里,相信聪明的读者也领悟到了,只要往xml文件按这种格式编写,把root替换成ArrayOfClassA(注意这里classA首字母变成大写了),反序列化时候就能直接得到classA[],对于 ListclassA也一样。所以,xml文件编写格式举例
您可能关注的文档
最近下载
- GB 50373-2019 通信管道与通道工程设计标准.docx
- 钱钟书《吃饭》课件.pptx VIP
- 肝功能异常解析课件.ppt VIP
- 赞美女员工的文章.doc VIP
- 哈弗-哈弗H6-产品使用说明书-哈弗H6 1.5T自动两驱精英型-CC6460RM07-哈弗H6(升级版)-使用说明书-中文-01-16.01-01M.pdf
- 财务管理专业研究生复试面试个人简历模板单页Word.docx
- 国际潘通色卡电子版(PMS+COLOUR+CHART)必威体育精装版版-免费下载.pdf
- 省英语优质课Melting-ice教学课件.pptx
- 计算机毕业设计论文 基于OpenCV的疲劳驾驶预警系统.docx
- 二次根式测试题附.pdf VIP
文档评论(0)