




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浅谈xml与对象的序列化与反序列化这篇文章主要讲述xml与对象的序列化与反序列化。并且会附上一些简单的序列化与反序列化方法,供大家使用。假设我们在一个web项目中有这样两个类1 public class member 2 3 public string num get; set; 4 public string name get; set; 5 6 public class team 7 8 public string name; 9 public list members get; set; 假设我们需要把team类的一个实例post到一个url,当然,使用form隐藏域提交就可以完成该功能。如果该team涵概三十条数据呢?为了辨别每一个member,我们得给参数的名字加上后缀。这就要一大串的隐藏域来完成:1 model team 2 3 4 5 6 . 7 8 9 10 11 document.getelementbyid(submitform).submit(); 12 还敢想象一下如果team再复杂一些,嵌套再多一些的状况么?呃,即使你愿意这么传数据,对方看到一坨参数名就够头疼了。我们都知道对象是不能在网络中直接传输的,不外尚有补救的方式。xml(extensible markup language)可扩展标记语言,本身就被设计用来存储数据,任何一个对象都可以用xml来描述。以team类为例:13 14 15 development 16 17 18 001 19 marry 20 21 22 002 23 john 24 25 26 这样一个xml文档就显露了team一个实例。聪明的看官应该已经想到,xml是可以作为对象信息的载体在网络中传输,因为它是文本形式的。怎么进行xml文档与对象的相互转换呢?xmlserializer类就是干这个活的。命名空间:system.xml.serialization程序集:system.xml(在 system.xml.dll 中)现在这里展示了一个提供序列化与反序列化方法的encodehelper类。deserialize方法将xml字符串转换为指定类型的对象;serialize方法则将对象转换为xml字符串。27 / 28 / 提供xml文档序列化 反序列化 29 / 30 public sealed class encodehelper 31 32 / 33 / 反序列化xml字符串为指定类型 34 / 35 public static object deserialize(string xml, type thistype) 36 37 xmlserializer xmlserializer = new xmlserializer(thistype); 38 object result; 39 try 40 41 using (stringreader stringreader = new stringreader(xml) 42 43 result = xmlserializer.deserialize(stringreader); 44 45 46 catch (exception innerexception) 47 48 bool flag = false; 49 if (xml != null) 50 51 if (xml.startswith(encoding.utf8.getstring(encoding.utf8.getpreamble() 52 53 flag = true; 54 55 56 throw new applicationexception(string.format(couldnt parse xml: 0; contains bom: 1; type: 2., xml, flag, thistype.fullname), innerexception); 57 58 return result; 59 60 61 / 62 / 序列化object对象为xml字符串 63 / 64 public static string serialize(object objecttoserialize) 65 66 string result = null ; 67 try 68 69 xmlserializer xmlserializer = new xmlserializer(objecttoserialize.gettype(); 70 71 using (memorystream memorystream = new memorystream() 72 73 xmltextwriter xmltextwriter = new xmltextwriter(memorystream, new utf8encoding(false); 74 xmltextwriter.formatting = formatting.indented; 75 xmlserializer.serialize(xmltextwriter, objecttoserialize); 76 xmltextwriter.flush(); 77 xmltextwriter.close(); 78 utf8encoding utf8encoding = new utf8encoding(false, true); 79 result= utf8encoding.getstring(memorystream.toarray(); 80 81 82 catch (exception innerexception) 83 84 throw new applicationexception(couldnt serialize object: + objecttoserialize.gettype().name, innerexception); 85 86 return result; 87 88 要使用这个类需要添加以下引用89 using system; 90 using system.text; 91 using system.io; 92 using system.xml; 93 using system.xml.serialization; 下面我们用一个控制台程序来演示一下这个类是如何工作的。这里是程序的main函数。94 static void main(string args) 95 96 list members = new list(); 97 member member1 = new member name = marry, num = 001 ; 98 member member2 = new member name = john, num = 002 ; 99 members.add(member1); 100 members.add(member2); 101 team team = new team name = development, membersmembers = members ; 102 var xml =encodehelper.serialize(team);/序列化 103 console.write(xml);/打印序列化后的xml字符串 104 console.readline(); 105 team newteam = encodehelper.deserialize(xml, typeof(team) as team;/反序列化时需要显式的进行类型转换 106 console.writeline(team name:+newteam.name);/显示反序列化后的newteam对象 107 foreach (var member in newteam.members) 108 109 console.writeline(member num: + member.num); 110 console.writeline(member name: + member.name); 111 112 console.readline(); 113 在执行完console.write(xml)这行代码后,就可以看到打印出来的xml文档了。114 115 116 development 117 118 119 001 120 marry 121 122 123 002 124 john 125 126 127 与我在文章开头给出的例子是一模一样的。最终反序列化出来的newteam对象打印出来是这样的结果。team name:developmentmember num:001member name:marrymember num:002member name:john回到我们开头的web通信的例子,利用xml序列化与反序列化来进行对象传送,咱们只要求把需求传送的对象序列化为xml字符串,使用一个隐藏域进行form提交就可以搞定咯!接收方再将接收到的xml字符串反序列化成预设的对象即可。前提是双方必须约定序列化与反序列化的过程一致,且对象相同。最后我们来看一下怎么利用一些特性来控制序列化与反序列化操作的过程。我们把开端的类改一下:128 public class member 129 130 xmlelement(member_num) 131 public string num get; set; 132 public string name get; set; 133 134 xmlroot(our_team) 135 public class team 136 137 nonserializedpublic string name;修正于2012413 138 xmlignorepublic string name; 139 public list members get; set; 140 141 142 143 public class member 144 145 xmlelement(member_num) 146 public string num get; set; 147 public string name get; set; 148 149 xmlroot(our_team) 150 public class team 151 152 nonserializedpublic string name;修正于2014713 153 xmlignorepublic string name; 154 public list members get; set; 155 然后我们再次执行刚才的控制台程序,序列化结果变成了这样:156 157 158 development修正于2014713 159 160 161 001 162 marry 163 164 165 002 166 john 167 168 169 本来的根节点team变成了our_team,member的子节点num变成了member_num,并且team的name子节点被忽略了。可见特性xmlroot可以控制根节点的显示和操作过程,xmlelement则针对子节点。如果某些成员被标记xmlignore nonserialized修正于2012413特性,则在序列化与反序列化过程中会被忽略毕业论文答辩开场白尊敬的主持人、评委老师:早上好,我是09春行政管理本科的学生xxx。我的毕业论文题目是论我国城市公共物品及其供给,指导老师是xxx老师。我的论文从确定题目、拟定提纲到完成初稿、二稿、三稿到最后的定稿,得到了x老师的精心指导,使我很快掌握了论文的写作方法,并在较短的时间内完成了论文的写作。不论今天答辩的结果如何,我都会由衷的感谢指导老师的辛勤劳动,感谢各位评委老师的批评指正。首先,我想谈谈这个毕业论文设计的目的及意义。随着全球经济一体化的突飞猛进,国家之间的经济界限渐趋模糊,但却使国家次级的经济形式城市经济的重要性日渐突出起来,城市之间的竞争正成为国家之间竞争的重要依托。世界各国(地区)政府都正积极致力于培育和提高城市竞争力,而城市公共物品的供给则是推动城市竞争力提高的重要因素,城市公共物品的供给理所当然地受到了各国(地区)政府的高度重视。在二十一世纪的今天,城市化不仅是我国经济增长的一个支撑点,也是增进国民福利的重要手段,若处理不当则会成为我国经济持续高速发展的障碍。未来10几年,中国城市化将进入从40%发展到70%的国际公认的加速发展时期。随着中国城市化进程的日益加快,如何在新的形势下,实现城市公共物品有效地供给以满足城市发展的需要,成为我们当前急需解决的重大问题。为此,研究我国城市公共物品的问题,具有十分重要的理论和现实意义。于是最终将论文题目定为论我国城市公共物品及其供给。其次,说说文章的具体结构。论文阐述了城市公共物品的定义及特点,分析了我国城市公共物品供给不足的现状及城市公共物品供给方式,着重探讨目前提高我国城市公共物品供给的方法:树立“公共财政”观念,转变政府职能 ;加快投资融资体制的改革,加大对城市公共物品的投资 ;改进政府对公共物品生产的管制方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字翻译成拼音课件
- 汉字的象形文字课件
- 汉字溯源课件谭飞
- 工程结算工作协议书
- 《中国传统文化》19秋冬校内知到智慧树答案
- 我父亲演讲稿
- 2024年秋新北师大版数学一年级上册课件 我上学啦 我上学啦 4.好玩的游戏
- 永旺消防安全知识培训课件
- 永久收入理论课件
- 水表基础知识培训教材课件
- 高中英语必背3500单词表完整版
- 项目总监职业生涯规划书
- GB/T 43278-2023医学实验室风险管理在医学实验室的应用
- 《小窗幽记》(全文及译文)
- 【语文单元主题教学】六年级上册第三单元《单元整体教学以及教材解读》课件部编版创新
- 疑难病例讨论PPT模板
- 分布式光伏发电项目EPC总包合同范本
- 银行关于不动产抵押物权证保管操作模版
- 大金压缩机使用说明(D型)
- 心肺复苏术(三人组)操作程序及技术标准
- 工程进度计划横道图
评论
0/150
提交评论