XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法使用LINQ TO XML或者反序列化的方法从XML中读取数据。
最简单的方法就是 .net framework提供的,只需要定义好xml数据格式,定义好对象即可。
1、调用方法:
using RenosData.RDBao.EvidenceUploadModel.Models;using RenosData.RDBao.EvidenceUploadModel.Parsers;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Linq;using System.Xml.Serialization;namespace TestApplication{ class Program { static void Main(string[] args) { string path = @"C:\Users\PEPE\Desktop\证据接口结构.xml"; FileStream stream = new FileStream(path, FileMode.Open); EvidenceFilesModel dep = (EvidenceFilesModel)XMLParser.Deserialize(typeof(EvidenceFilesModel), stream); stream.Close(); } }}
2、xml解析类
using RenosData.RDBao.EvidenceUploadModel.Models;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Serialization;namespace RenosData.RDBao.EvidenceUploadModel.Parsers{ public class XMLParser { public T Deserialize(T t, string s) { using (StringReader sr = new StringReader(s)) { XmlSerializer xz = new XmlSerializer(t.GetType()); return (T)xz.Deserialize(sr); } } public EvidenceFilesModel Convert(string xml) { //将xml反序列化成对象 EvidenceFilesModel b = new EvidenceFilesModel(); return Deserialize (b, xml); } #region 反序列化 /// /// 反序列化 /// /// 类型 /// XML字符串 ///public static object Deserialize(Type type, string xml) { try { using (StringReader sr = new StringReader(xml)) { XmlSerializer xmldes = new XmlSerializer(type); return xmldes.Deserialize(sr); } } catch (Exception e) { return null; } } /// /// 反序列化 /// /// /// ///public static object Deserialize(Type type, Stream stream) { XmlSerializer xmldes = new XmlSerializer(type); return xmldes.Deserialize(stream); } #endregion #region 序列化XML文件 /// /// 序列化XML文件 /// /// 类型 /// 对象 ///public static string Serializer(Type type, object obj) { MemoryStream Stream = new MemoryStream(); //创建序列化对象 XmlSerializer xml = new XmlSerializer(type); try { //序列化对象 xml.Serialize(Stream, obj); } catch (InvalidOperationException) { throw; } Stream.Position = 0; StreamReader sr = new StreamReader(Stream); string str = sr.ReadToEnd(); return str; } #endregion }}
3、xml对象
根据xml定义的对象如下
eg 根目录类,其他的类就按xml格式一路下去
////// 证据接口结构模型 /// [Serializable] [XmlRoot("EvidenceFiles")] public class EvidenceFilesModel { ////// 证据包信息 /// public EvidencePackageModel EvidencePackage { get; set; } ////// 证据信息明细 /// [XmlArrayItem("Evidence")] public ListEvidences { get; set; } }
注意特性:[XmlArrayItem("Evidence")] 这个下面是会有多个分支
4、XML代码
1.0 TrackNO Name Description ThumbFileName 2 1024 MD5 算法的值 张三 编号 证件号 标识 验证码 版本号 张三 编号 证件号 2014-1-1T15:00:00 地点 成方式- 系统名称 版本号 算法 版本号 .doc 类型 名称 版本 文件名 2014-1-1T15:00:00 账号 签名算法 签名算法密钥 签名的值 张三 编号 用户证件号 2014-1-1T15:00:00 生成的地点 证据的生成方式 证据的加密算法 版本号 .doc 文件类型 解析的应用系统名称 解析的应用系统版本号 1 2014-1-1T15:00:00 2 22 33 4