http://www.tuicool.com/articles/IjE7ban
http://www.cnblogs.com/johnsmith/archive/2012/12/03/2799795.html
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 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<EvidenceFilesModel>(b, xml); } #region 反序列化 /// <summary> /// 反序列化 /// </summary> /// <param name="type">類型</param> /// <param name="xml">XML字符串</param> /// <returns></returns> 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; } } /// <summary> /// 反序列化 /// </summary> /// <param name="type"></param> /// <param name="xml"></param> /// <returns></returns> public static object Deserialize(Type type, Stream stream) { XmlSerializer xmldes = new XmlSerializer(type); return xmldes.Deserialize(stream); } #endregion #region 序列化XML文件 /// <summary> /// 序列化XML文件 /// </summary> /// <param name="type">類型</param> /// <param name="obj">對象</param> /// <returns></returns> 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格式一路下去
/// <summary> /// 證據接口結構模型 /// </summary> [Serializable] [XmlRoot("EvidenceFiles")] public class EvidenceFilesModel { /// <summary> /// 證據包信息 /// </summary> public EvidencePackageModel EvidencePackage { get; set; } /// <summary> /// 證據信息明細 /// </summary> [XmlArrayItem("Evidence")] public List<EvidenceModel> Evidences { get; set; } }
注意特性:[XmlArrayItem("Evidence")] 這個下面是會有多個分支
4、XML代碼
<?xml version="1.0" encoding="utf-8"?> <EvidenceFiles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--證據包信息--> <EvidencePackage> <Version>1.0</Version> <Package> <TrackNO>TrackNO</TrackNO> <Name>Name</Name> <Description> Description </Description> <ThumbFileName> ThumbFileName </ThumbFileName> <Time>2011-10-24T15:35:57</Time> </Package> <Integrity> <EvidenceCount>2</EvidenceCount> <EvidenceSize>1024</EvidenceSize> <Algorithm>MD5</Algorithm> <AlgorithmValue>算法的值</AlgorithmValue> </Integrity> <Owner> <Name>張三</Name> <Identity>編號</Identity> <Credentials>證件號</Credentials> </Owner> <GatherApp> <AppId>標識</AppId> <AppKey>驗證碼</AppKey> <Version>版本號</Version> </GatherApp> </EvidencePackage> <Evidences> <Evidence> <EvidenceMetaData> <EvidenceUser> <GatherUser> <Name>張三</Name> <Identity>編號</Identity> <Credentials>證件號</Credentials> </GatherUser> </EvidenceUser> <Environment> <CreateTime>2014-1-1T15:00:00</CreateTime> <Location>地點</Location> <GenerationMethod>成方式-</GenerationMethod> </Environment> <GatherApp> <AppName>系統名稱</AppName> <Version>版本號</Version> </GatherApp> <Parser> <Encrypt> <Algorithm>算法</Algorithm> <AlgorithmVersion>版本號</AlgorithmVersion> </Encrypt> <ParserApp> <FileExtension>.doc</FileExtension> <FileType>類型</FileType> <AppName>名稱</AppName> <AppVersion>版本</AppVersion> </ParserApp> </Parser> <SourceFile> <FileName>文件名</FileName> <CreateTime>2014-1-1T15:00:00</CreateTime> </SourceFile> </EvidenceMetaData> <Signature> <UserSignature> <Identity>賬號</Identity> <Algorithm>簽名算法</Algorithm> <SignKey>簽名算法密鑰</SignKey> <SignValue>簽名的值</SignValue> </UserSignature> </Signature> </Evidence> <Evidence> <EvidenceMetaData> <EvidenceUser> <GatherUser> <Name>張三</Name> <Identity>編號</Identity> <