• 实体类和xml之间的序列化


        /// <summary>
        /// Xml序列化与反序列化
        /// </summary>
        public class XmlUtil
        {
            public static string GetRoot(string xml)
            {
                if (xml == null)
                    xml = "";//预防下边的 Replace()、Trim()报错
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml.Replace("
    ", "").Replace("", "").Trim());
                var e = doc.DocumentElement;
                return e.InnerText;
            }
    
            #region 反序列化
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <param name="xml">XML字符串</param>
            /// <returns></returns>
            public static T Deserialize<T>(string xml)
            {
                return (T)Deserialize(typeof(T), xml);
            }
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <param name="stream">字节流</param>
            /// <returns></returns>
            public static T Deserialize<T>(Stream stream)
            {
                return (T)Deserialize(typeof(T), stream);
            }
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <param name="type">类型</param>
            /// <param name="xml">XML字符串</param>
            /// <returns></returns>
            public static object Deserialize(Type type, string xml)
            {
                if (xml == null)
                    xml = "";//预防下边的 Replace()、Trim()报错
                try
                {
                    xml = xml.Replace("
    ", "").Replace("", "").Trim();
                    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="obj">对象</param>
            /// <returns></returns>
            public static string Serializer<T>(T obj)
            {
                return Serializer(typeof(T), obj);
            }
            /// <summary>
            /// 序列化
            /// </summary>
            /// <param name="type">类型</param>
            /// <param name="obj">对象</param>
            /// <returns></returns>
            public static string Serializer(Type type, object obj)
            {
                MemoryStream Stream = new MemoryStream();
                XmlSerializerNamespaces _name = new XmlSerializerNamespaces();
                _name.Add("", "");//这样就 去掉 attribute 里面的 xmlns:xsi 和 xmlns:xsd
                XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
                xmlWriterSettings.Encoding = new UTF8Encoding(false);//设置编码,不能用Encoding.UTF8,会导致带有BOM标记 
                xmlWriterSettings.Indent = true;//设置自动缩进
                //xmlWriterSettings.OmitXmlDeclaration = true;//删除XmlDeclaration:<?xml version="1.0" encoding="utf-16"?>
                //xmlWriterSettings.NewLineChars = "
    ";
                //xmlWriterSettings.NewLineHandling = NewLineHandling.None;
                XmlSerializer xml = new XmlSerializer(type);
                try
                {
                    using (XmlWriter xmlWriter = XmlWriter.Create(Stream, xmlWriterSettings))
                    {
                        //序列化对象
                        xml.Serialize(xmlWriter, obj, _name);
                    }
                }
                catch (InvalidOperationException)
                {
                    throw;
                }
                return Encoding.UTF8.GetString(Stream.ToArray()).Trim();
            }
            #endregion
        }
  • 相关阅读:
    第一个gulp程序
    r.js打包
    吃饭途中的回忆
    IE下script标签的readyState属性
    CSS 选择器
    html的base标签
    迷你MVVM框架 avalonjs 1.3.9发布
    2014年的年终总结
    Visual Studio2017 数据库架构比较
    MVC开发中自定义返回类型
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173280.html
Copyright © 2020-2023  润新知