最近在做一个需求,是把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