




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对象和XML文件的转换很多时候,我们开发程序都需要使用到对象的XML序列化和反序列化,对象的XML序列化和反序列化,既可以使用XML对象(XmlDocument )进行操作,也可以使用XmlSerializer进行操作,两个各有优点,就操作性而已,我倾向于使用后者来操作XML。本文介绍三种方式操作XML,普通的XDocument的API操作,方便的XmlSerializer对象序列化及反序列化操作,加密XML对象序列化操作。1、普通的XML对象操作,利用XML对象(XmlDocument )。一个典型的利用XmlDocument对象操作XML的例子代码如下。1 public static void RunSnippet() 2 3 XmlDocument xmldoc = new XmlDocument ( ) ; 4 /加入XML的声明段落 5 XmlNode xmlnode = xmldoc.CreateNode ( XmlNodeType.XmlDeclaration , , ) ; 6 xmldoc.AppendChild (xmlnode ) ; 7 /加入一个根元素 8 XmlElement xmlelem = xmldoc.CreateElement ( , ROOT , ) ; 9 XmlText xmltext = xmldoc.CreateTextNode ( Root Text ) ; 10 xmlelem.AppendChild ( xmltext ) ; 11 xmldoc.AppendChild ( xmlelem ) ; 12 /加入另外一个元素 13 XmlElement xmlelem2 = xmldoc.CreateElement (SampleElement ) ; 14 xmlelem2 = xmldoc.CreateElement ( , SampleElement , ) ; 15 xmltext = xmldoc.CreateTextNode ( The text of the sample element ) ; 16 xmlelem2.AppendChild ( xmltext ) ; 17 xmldoc.ChildNodes.Item(1).AppendChild ( xmlelem2 ) ; 18 /保存创建好的XML文档 19 try 20 21 xmldoc.Save ( c:data.xml ) ; 22 23 catch ( Exception e ) 24 25 /显示错误信息 26 Console.WriteLine ( e.Message ) ; 27 28 Console.ReadLine ( ) ; 29 得到的输出结果如下所示。30 31 Root Text 32 The text of the sample element 33 2、使用XmlSerializer进行XML操作先提供两个对象的序列化和反序列化的封装函数,如下所示。1 / 2 / 对象序列化XML到文件中 3 / 4 / 文件路径 5 / 对象 6 / 对象类型 7 private bool XmlSerialize(string path, object obj, Type type) 8 9 XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 10 ns.Add(, ); 11 12 try 13 14 /如果文件目录不存在,那么创建目录 15 if (!File.Exists(path) 16 17 FileInfo fi = new FileInfo(path); 18 if (!fi.Directory.Exists) 19 20 Directory.CreateDirectory(fi.Directory.FullName); 21 22 23 24 using (Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None) 25 26 XmlSerializer format = new XmlSerializer(type); 27 28 format.Serialize(stream, obj, ns); 29 stream.Close(); 30 31 32 return true; 33 34 catch (Exception ex) 35 36 Console.WriteLine(ex.Message); 37 return false; 38 39 40 41 / 42 / XML反序列化 43 / 44 / 文件路径 45 / 对象类型 46 / 47 private object XmlDeserialize(string path, Type type) 48 49 try 50 51 using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read) 52 53 XmlSerializer formatter = new XmlSerializer(type); 54 stream.Seek(0, SeekOrigin.Begin); 55 object obj = formatter.Deserialize(stream); 56 stream.Close(); 57 return obj; 58 59 60 catch 61 62 return null; 63 64 注意其中代码 65 XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 66 ns.Add(, ); 是把默认的xmlns命名空间多余的内容去掉,这样得到比较干净的XML。在使用的时候,我们需要定义好对象的实体,这样才能给予对象进行操作,定义的实体类如下所示。67 Serializable 68 public class UserInfo 69 70 public string ID get; set; 71 public string UserNo get; set; 72 public string UserName get; set; 73 public string Sex get; set; 74 public string Birthday get; set; 75 76 77 Serializable 78 public class DataOfUser 79 80 XmlElement(ElementName = m_User) 81 public List list = new List(); 82 调用序列化函数的代码例子如下所示83 private void btnUserNormal_Click(object sender, EventArgs e) 84 85 DataOfUser obj = new DataOfUser(); 86 UserInfo user = new UserInfo(); 87 user.ID=Guid.NewGuid().ToString(); 88 user.Sex = 男; 89 user.UserName = 张三; 90 user.UserNo = 20010001; 91 user.Birthday = 1999-1-1; 92 obj.list.Add(user); 93 94 user = new UserInfo(); 95 user.ID = Guid.NewGuid().ToString(); 96 user.Sex = 女; 97 user.UserName = 李氏; 98 user.UserNo = 20020001; 99 user.Birthday = 1998-1-1; 100 obj.list.Add(user); 101 102 try 103 104 XmlSerialize(C:User.xml, obj, obj.GetType(); 105 MessageUtil.ShowTips(Ok); 106 107 catch (Exception ex) 108 109 MessageUtil.ShowError(ex.Message); 110 111 这样得到的XML内容如下所示。112 113 114 115 f8a8b323-5c56-4c21-9ddf-1cd30f78dfca 116 20010001 117 张三 118 男 119 1999-1-1 120 121 122 bbb36378-ec27-4e20-ad4b-2d2dc7e142e4 123 20020001 124 李氏 125 女 126 1998-1-1 127 128 反序列化的操作也比较简单,不再赘述。3)把对象实例化到XML中并进行加密处理首先我们定义两个序列化加密、解码并反序列化的函数如下所示。1 / 2 / XML序列化并加密 3 / 4 / 文件路径 5 / 对象 6 / 对象类型 7 / 8 private bool XmlSerializeEncrypt(string path, object obj, Type type) 9 10 XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 11 ns.Add(, ); 12 13 try 14 15 if (!File.Exists(path) 16 17 FileInfo fi = new FileInfo(path); 18 if (!fi.Directory.Exists) 19 20 Directory.CreateDirectory(fi.Directory.FullName); 21 22 23 24 using (Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None) 25 26 string content = ; 27 using(MemoryStream ms = new MemoryStream() 28 29 XmlSerializer format = new XmlSerializer(type); 30 format.Serialize(ms, obj, ns); 31 ms.Seek(0, 0); 32 content = Encoding.UTF8.GetString(ms.ToArray(); 33 34 35 string encrypt = EncodeHelper.EncryptString(content); 36 byte bytes = Encoding.UTF8.GetBytes(encrypt); 37 stream.Write(bytes, 0, bytes.Length); 38 stream.Close(); 39 40 41 42 return true; 43 44 catch (Exception ex) 45 46 Console.WriteLine(ex.Message); 47 return false; 48 49 50 51 / 52 / 解密并进行XML反序列化 53 / 54 / 文件路径 55 / 对象类型 56 / 57 private object XmlDeserializeDecrypt(string path, Type type) 58 59 try 60 61 string encrypt = File.ReadAllText(path, Encoding.UTF8); 62 string content = EncodeHelper.DecryptString(encrypt, true); 63 byte bytes = Encoding.UTF8.GetBytes(content); 64 using (MemoryStream stream = new MemoryStream(bytes) 65 66 XmlSerializer formatter = new XmlSerializer(type); 67 68 stream.Seek(0, SeekOrigin.Begin); 69 object obj = formatter.Deserialize(stream); 70 stream.Close(); 71 return obj; 72 73 74 catch(Exception ex) 75 76 Console.WriteLine(ex.Message); 77 return null; 78 79 这样函数定义好后,调用和前面没有加密的差不多,如下所示。80 private void btnUserEncrypt_Click(object sender, EventArgs e) 81 82 DataOfUser obj = new DataOfUser(); 83 UserInfo user = new UserInfo(); 84 user.ID = Guid.NewGuid().ToString(); 85 user.Sex = 男; 86 user.UserName = 张三; 87 user.UserNo = 20010001; 88 user.Birthday = 1999-1-1; 89 obj.list.Add(user); 90 91 user = new UserInfo(); 92 user.ID = Guid.NewGuid().ToSt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业智商测试试题及答案
- 高职建筑专业试题及答案
- 酒店专业试题及答案
- 环保专业试题及答案
- 甲状腺专业试题及答案
- 沟通专业试题及答案
- 河北省承德市平泉市党坝中学2025-2026年学年九年级历史上学期9月月考试题(含答案)
- 宁波生态假山施工方案
- 路口半弧形护栏施工方案
- 楼顶景观水系施工方案
- 肺栓塞(讲课教学课件)
- 二手车寄售协议书范本
- (完整版)医疗器械基础知识培训考试试题及答案
- 2025年度拍卖会竞拍者资格审查合同4篇
- 门诊挂号与预约管理制度
- 《地理标志农产品产业化发展研究》
- 泄漏管理培训课件
- 水彩课件教学课件
- 教师师德师风培训专题课件
- C1汽车驾驶证科目一考试题库750题(打印省纸版版)
- 检验科质量管理SOP-检验科SOP
评论
0/150
提交评论