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 = ;
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>
<Credentials>用户证件号</Credentials>
</GatherUser>
</EvidenceUser>
<Environment>
<CreateTime>2014-1-1T15:00:00</CreateTime>
<Location>生成的地点</Location>
<GenerationMethod>证据的生成方式</GenerationMethod>
</Environment>
<Parser>
<Encrypt>
<Algorithm>证据的加密算法</Algorithm>
<AlgorithmVersion>版本号</AlgorithmVersion>
</Encrypt>
<ParserApp>
<FileExtension>.doc</FileExtension>
<FileType>文件类型</FileType>
<AppName>解析的应用系统名称</AppName>
<AppVersion>解析的应用系统版本号</AppVersion>
</ParserApp>
</Parser>
<SourceFile>
<FileName>1</FileName>
<CreateTime>2014-1-1T15:00:00</CreateTime>
</SourceFile>
</EvidenceMetaData>
<Signature>
<UserSignature>
<Identity>2</Identity>
<Algorithm>22</Algorithm>
<SignKey>33</SignKey>
<SignValue>4</SignValue>
</UserSignature>
</Signature>
</Evidence>
</Evidences>
</EvidenceFiles>

C# XML对象序列化、反序列化的更多相关文章

  1. C# XML对象序列化、反序列化 - PEPE YU

    http://www.tuicool.com/articles/IjE7ban http://www.cnblogs.com/johnsmith/archive/2012/12/03/2799795. ...

  2. .net的XML对象序列化VS WCF中xml序列化问题

    整理一下 .net 对象序列化注意事项: 1. 字段:必须是 public类型 2.属性:只读或者只写的属性不被序列化,只有 可读可写并且赋值的才可以 序列化: Someclass obj = new ...

  3. Java对象序列化/反序列化的注意事项(转)

    Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久 ...

  4. Java对象序列化/反序列化的注意事项

    Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久 ...

  5. 复杂 XML 的 序列化 反序列化

    已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象. <?xml version="1.0" encoding="utf-8" ...

  6. xml对象序列化

    public static class XSerializer { /// <summary> /// 将对象序列化为xml字符串 /// </summary> /// < ...

  7. c# XML-Object对象 序列化-反序列化

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  8. php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...

  9. xml对象的序列化和反序列化

    对象序列化: /// <summary>        /// 将一个对象序列化为XML字符串        /// </summary>        /// <par ...

随机推荐

  1. webpack学习简单总结

    webpack使用总结: 入门使用: 这个报错说明需要安装相应的Loader,并在引用时指定相应的loader 执行成功如图: chunk指相应的区块. 要是css引入正确:必须引入css-loade ...

  2. level 6 - unit4 - 强调句

    强调句 强调实义动词 范围: 一般现在时/一般过去式:肯定句 方法:v.前面加do/does/did 例子: i love you --> i do love you i loved you - ...

  3. VC++关于UNICODE版本的开发

    关于UNICODE版本的开发 代码转换方案 概述 在VC6.0中,相应的有一些宏来代替ANSI的函数.宏或数据类型,这些宏在ANSI编译条件中处理字符串为单字节,而在UNICODE中处理字符串为双字节 ...

  4. symfony分页实现方法

    1.symfony分页是要用到组件的,所以这里使用KnpPaginatorBundle实现翻页 2. 用composer下载 在命令行中:  composer require "knplab ...

  5. go语言之PLAN9汇编

    http://blog.studygolang.com/2013/05/asm_and_plan9_asm/ https://lrita.github.io/2017/12/12/golang-asm ...

  6. 【Cesium】模型转换和使用(转)

    http://52.4.31.236/convertmodel.html https://blog.csdn.net/UmGsoil/article/details/74572877 var view ...

  7. RF变量列表类型@{}和${}列表类型的关系

    总结:@{}列表类型和${}列表类型都可以表示list类型,均可以通过 set variable 和 create list 创建,区别主要是展示格式和引用格式: @{}类型可以通过 set vari ...

  8. Python中执行外部命令

    有很多需求需要在Python中执行shell命令.启动子进程,并捕获命令的输出和退出状态码,类似于Java中的Runtime类库. subprocess模块的使用: Python使用最广泛的是标准库的 ...

  9. AddComponentRecursively

    class AddComponentRecursively extends ScriptableWizard { var componentName : String = ""; ...

  10. MQTT-C-PUB

    /* ============================================================================ Name        : mqtest ...