C# XML对象序列化、反序列化
XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法使用LINQ TO XML或者反序列化的方法从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对象序列化、反序列化的更多相关文章
- C# XML对象序列化、反序列化 - PEPE YU
http://www.tuicool.com/articles/IjE7ban http://www.cnblogs.com/johnsmith/archive/2012/12/03/2799795. ...
- .net的XML对象序列化VS WCF中xml序列化问题
整理一下 .net 对象序列化注意事项: 1. 字段:必须是 public类型 2.属性:只读或者只写的属性不被序列化,只有 可读可写并且赋值的才可以 序列化: Someclass obj = new ...
- Java对象序列化/反序列化的注意事项(转)
Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久 ...
- Java对象序列化/反序列化的注意事项
Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久 ...
- 复杂 XML 的 序列化 反序列化
已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象. <?xml version="1.0" encoding="utf-8" ...
- xml对象序列化
public static class XSerializer { /// <summary> /// 将对象序列化为xml字符串 /// </summary> /// < ...
- c# XML-Object对象 序列化-反序列化
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- xml对象的序列化和反序列化
对象序列化: /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <par ...
随机推荐
- BareTail大文件日志实时查看工具
BareTail 动态的查看日志文件,就像Linux上的tail tail -f nohup.out 功能: 实时文件查看 tail命令模式,自动滚动 支持2g以上大文件 自动滚动 彩色监控 多文件监 ...
- MySQL自定义排序函数FIELD()
MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1.str2.str3.str4比较,返回1.2.3.4,如遇 ...
- docker 相关文章
https://baijiahao.baidu.com/s?id=1581420975184566963&wfr=spider&for=pc 创建centos基础镜像 https ...
- jquery ajax 请求中 中文汉字的 转码问题
1.汉字参数直接跟在请求连接的后面,这样需要使用encodeURIComponent(fileName)或者encodeURI(fileName)转码两次 后台使用URLDecoder.decode( ...
- docker dockerfile构建自己的tomcat镜像
文件 1.apache-tomcat-8.5.24.tar.gz, jdk-8u151-linux-x64.tar.gz Dockerfile文件: FROM centosWORKDIR /usrCO ...
- layui文件上传进度条(模拟)
1.修改上传组件js(没测) https://blog.csdn.net/weixin_42457316/article/details/81017471 https://www.cnblogs.co ...
- List中的Contains方法内部其实是用对象的equals方法做比较,所以如果比较两个类就重写类的equals方法即可;而Set是调用equals和hashCode
public class Person { private String name; private int age; public String getName() { return name; } ...
- hbase2.0.0-安装部署
依赖hadoop 环境,我这边的版本是hadoop-2.6.5 选择hbase2.0.0版本的时候,去官网查看支持的hadoop版本 1.伪分布式安装 下载:http://mirror.bit.edu ...
- 【代码审计】711cms_V1.0.5 目录遍历漏洞分析
0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...
- 重新生成RF的测试库API文档
在dos窗口下执行如下命令: 命令:python -m robot.libdoc 库名称 生成的API文件名.html 例如:python -m robot.libdoc MongoDBLibrar ...