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. Win7 共享打印机 “错误:共享无法保存设置”

    原因:windows的后台防火墙服务进程[Windows Firewall{服务描述}.MpsSvc{服务名字}] 关闭了.services.smc 关闭 解决:重启服务 关闭防火墙的功能,通过控制面 ...

  2. MathType输入框怎么调整

    在用MathType编辑公式编辑器时,除了可以对MathType工具栏的显示比例进行调整以外,还可以对编辑时的输入框进行调整.这样在编辑的过程中,工具栏可以看得很清楚,同时框输入框也可以看得很清楚,这 ...

  3. 禁止requests请求https的提示InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more

     提示这个 InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from ...

  4. PHP导出excel文件的几种方式

    PHP导出excel文件的几种方式 先说说动态生成的内容当作文件来下载的方法: 1.通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来 ...

  5. 【高级算法】遗传算法解决3SAT问题(C++实现)

    转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46910079 1 SAT问题描写叙述 命题逻辑中合取范式 (CNF) 的可满足性问 ...

  6. 01-虚拟软件vmware安装

    什么是虚拟软件: 虚拟原件是一个可以使你在一台机器上同时运行二个或更多Windows.LINUX等系统.它可以模拟一个标准PC环境.这个环境和真实的计算机一样,都有芯片组.CPU.内存.显卡.声卡.网 ...

  7. iOS 苹果标识符

  8. PHP字符串offset取值特性

    在PHP的代码基础上,PHP字符串offset取值特性,可以拿来利用,给PHP应用程序带来安全风险. 在PHP中,可以像操作数组一样操作字符串,字符串中的字符可以用类似数组结构中的方括号包含对应的数字 ...

  9. 如何删除一个CSDN上自己上传的资源

    原文地址:http://www.xuebuyuan.com/1875216.html 昨天晚上进行测试,上传了一个压缩包和大家分享,测试完成后,为了不想给被测试的公司造成伤害,决定把上传的包删除,结果 ...

  10. OBS显示器获取显示黑色没有图像