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>
<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对象序列化、反序列化 - PEPE YU的更多相关文章

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

    XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法使用LINQ TO XML或者反序列化的方法从XML中读取数据. 最简单的方法就是.net framework提供 ...

  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. 1307 绳子与重物(DFS)

    1307 绳子与重物 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量 ...

  2. Genealogical tree

    Genealogical tree Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6032 Accepted: 3973 Spec ...

  3. base64文件上传的问题

    package com.zhicall.media.util; import java.io.FileInputStream; import java.io.FileOutputStream; imp ...

  4. 你意识到苹果公司已经抛弃了GC吗?

    为什么移动Web应用程序很慢(译) - tangzhnju - 博客园 http://www.cnblogs.com/codemood/p/3213459.html

  5. Linux中的流程控制语句

    if语句 if [ 条件判断式 ] then 程序elif [ 条件判断式 ] then 程序else 程序fi 注意: a.使用fi结尾 b.条件判断式和中括号之间需要有空格 [root@local ...

  6. corethink功能模块探索开发(二)让这个模块可安装

    要想让这个模块可安装,只需要在opcmf.php文件中写一些配置数据就行 随便写点 Equip/opencmf.php <?php // 模块信息配置 return array( // 模块信息 ...

  7. Happy Hours, Happy Days

    No matter our age, being happy creates more happiness--making a better world for all of us. 无论青春与否,让 ...

  8. mysql终结篇

    一.mysql中not null unique和primary key 的区别 1.not null unique 是给一个字段设置非空且唯一的特性,当表中字段没有设置primary key的主键特性 ...

  9. 在英文Windows操作系统上使用SQL Server Management Studio(SSMS)导入Excel 97-2003文件时报错:Failure creating file

    今天在公司服务器上使用SQL Server Management Studio(SSMS)导入Excel 97-2003文件(.xls)时报错: Failure creating file. (Mic ...

  10. FTP主动连接与被动连接

    FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,应用层的协议,它基于传输层, FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而 ...