XML的序列化和反序列化

来源:互联网 发布:宣传册软件 编辑:程序博客网 时间:2024/05/30 23:02

最近在做一个需求,是把passport返回的结果(xml)转变为我自己定义的C#对象。


首先提供一个序列化的工具类:


using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Data;using System.Xml;using System.Xml.Serialization; /// <summary>/// Xml序列化与反序列化/// </summary>public class XmlUtil{    #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 序列化    /// <summary>    /// 序列化    /// </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();                 sr.Dispose();        Stream.Dispose();         return str;    }     #endregion}

假如xml是:


public string testXML = "<?xml version=\"1.0\" encoding=\"gb2312\"?><user><id>12654</id><name>wangjue</name><displayName>王xx</displayName><token>DBDF3367E9F6490ABB8AC711F94E24CE</token><departmentCode>IT</departmentCode><departmentName>技术部</departmentName></user>";


对这个xml进行一下序列化。


首先定义我的C#类

[XmlRoot("user")]//序列化根节点需要使用的名称    public class PassportUser    {        [XmlElement("id")]//序列化子节点需要使用的名称        public int Id { set; get; }        [XmlElement("name")]        public string Name { set; get; }        [XmlElement("displayName")]        public string DisplayName { set; get; }        [XmlElement("token")]        public string Token { set; get; }        [XmlElement("departmentCode")]        public string DepartmentCode { set; get; }        [XmlElement("departmentName")]        public string DepartmentName { set; get; }    }


调用:

  var result = Deserialize(typeof(PassportUser), testXML);


成功实现。


参考自:http://blog.okbase.net/haobao/archive/62.html


原创粉丝点击