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

http://www.tuicool.com/articles/IjE7ban

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>
时间: 2024-12-29 12:13:11

C# XML对象序列化、反序列化 - PEPE YU的相关文章

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

Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下. 对象序列化机制是Java内建的一种对象持久化方式,可以很容易实现在JVM中的活动对象与字节数组(流)之间进行转换,使用得Java对象可以被存储,可以被网络传输,在网络的一

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

对象序列化: /// <summary>        /// 将一个对象序列化为XML字符串        /// </summary>        /// <param name="o">要序列化的对象</param>        /// <param name="encoding">编码方式</param>        /// <returns>序列化产生的XML字符串&

C#对象序列化与反序列化

1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下. SOAP序列化:对象序列化之后的结果符合SOAP协议,也就是可以通过SOAP 协议传输,通过System.Runtime.Serialization.Formatters.Soap命名空间下的SoapFormatter类来实现的.

C#实现复杂XML的序列化与反序列化

这篇文章主要介绍了C#实现复杂XML的序列化与反序列化的方法,是非常实用的一个技巧,需要的朋友可以参考下 本文以一个实例的形式讲述了C#实现复杂XML的序列化与反序列化的方法.分享给大家供大家参考.具体方法如下: 已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象. Default.XML文件如下: <?xml version="1.0" encoding="utf-8" ?> <config> <rule

Java对象序列化与反序列化

Java对象序列化与反序列化 对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输. 对象的序列化是将一个Java对象写入IO流:与此对应的,反序列化则是从IO流中恢复一个Java对象. 实现序列化 如果要将一个java对象序列化,那么对象的类需要是可序列化的.要让类可序列化,那么这个类需要实现如下两个接口

C#.net XML的序列化与反序列化

/// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化的对象</param> /// <param name="encoding">编码方式</param> /// <returns>序列化产生的XML字符串</returns> public static string Seria

12.C#对象序列化与反序列化

1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下. SOAP序列化:  对象序列化之后的结果符合SOAP协议,也就是可以通过SOAP 协议传输,通过System.Runtime.Serialization.Formatters.Soap命名空间下的SoapFormatter类来实现的

通过XmlSerializer 实现XML的序列化与反序列化

通过XmlSerializer 我们可以十分简单的将Model与XML进行转换 官文在点这里 帮助类 1 using System; 2 using System.Text; 3 using System.Xml.Serialization; 4 using System.IO; 5 using System.Xml; 6 7 namespace BLL 8 { 9 public class XmlHelper 10 { 11 public static T DeSerializeModels<

用C++优雅的实现对象到文件的序列化/反序列化

需求 . 在写代码的过程中,经常会需要把代码层面的对象数据保存到文件,而这些数据会以各种格式存储.例如:json,xml,二进制等等.最近恰好就需要把对象以二进制存储到硬盘.这是一个很简单的需求,相比json,xml格式,二进制是直接把字节copy到硬盘,没有中间商赚差价,所以这实现起来相对容易. 实现 struct Vec3 { float x; float y; float z; } . 上面是一个简单的三维向量结构体,如何把它序列化到文件呢? Vec3 v; v.x = 1.0f; v.y