123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- using System;
- using System.Data;
- using System.IO;
- using System.Xml;
- using System.Xml.Serialization;
-
- namespace Common.system
- {
-
- /// <summary>
- /// 通用XML序列化和反序列化工具类
- /// 创建人:赵耀
- /// 创建时间:2018年11月16日
- /// </summary>
- public static class XmlUtilHelper
- {
- #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)
- {
- 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);
- }
- /// <summary>
- /// 反序列化实体
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="strXML"></param>
- /// <returns></returns>
- public static T DESerializer<T>(string strXML) where T : class
- {
- try
- {
- using (StringReader sr = new StringReader(strXML))
- {
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- return serializer.Deserialize(sr) as T;
- }
- }
- catch (Exception)
- {
- return null;
- }
- }
-
- /// <summary>
- /// 从xml序列中反序列化
- /// </summary>
- /// <param name="objname"></param>
- /// <returns></returns>
- public static object Deserailize(Type type, string filename)
- {
- try
- {
- object obj;
- if (!System.IO.File.Exists(filename))
- {
- throw new Exception("指定文件不存在");
- }
- //Xml格式反序列化
- using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- XmlSerializer formatter = new XmlSerializer(type);
- obj = formatter.Deserialize(stream);
- stream.Close();
- }
- return obj;
- }
- catch (Exception)
- {
- //Logger.Log4NetHelp.Error("反序列化失败:", e);
- return null;
- }
- }
-
- /// <summary>
- /// 将xml转为Datable
- /// </summary>
- public static DataTable XmlToDataTable(string xmlStr)
- {
- if (!string.IsNullOrEmpty(xmlStr))
- {
- StringReader StrStream = null;
- XmlTextReader Xmlrdr = null;
- try
- {
- DataSet ds = new DataSet();
- //读取字符串中的信息
- StrStream = new StringReader(xmlStr);
- //获取StrStream中的数据
- Xmlrdr = new XmlTextReader(StrStream);
- //ds获取Xmlrdr中的数据
- ds.ReadXml(Xmlrdr);
- return ds.Tables[0];
- }
- catch (Exception)
- {
- return null;
- }
- finally
- {
- //释放资源
- if (Xmlrdr != null)
- {
- Xmlrdr.Close();
- StrStream.Close();
- StrStream.Dispose();
- }
- }
- }
- return null;
- }
-
- #endregion
-
- #region 序列化
- /// <summary>
- /// 实体类转XML
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="obj"></param>
- /// <returns></returns>
- public static string XmlSerialize<T>(T obj)
- {
- using (StringWriter sw = new StringWriter())
- {
- Type t = obj.GetType();
- XmlSerializer serializer = new XmlSerializer(obj.GetType());
- serializer.Serialize(sw, obj);
- sw.Close();
- return sw.ToString();
- }
- }
- /// <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)
- {
- //Logger.Log4NetHelp.Error("序列化失败:", ex);
- }
- Stream.Position = 0;
- StreamReader sr = new StreamReader(Stream);
- string str = sr.ReadToEnd();
-
- sr.Dispose();
- Stream.Dispose();
-
- return str;
- }
-
- #endregion
- }
- }
|