zoukankan      html  css  js  c++  java
  • 实体类和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
        }
  • 相关阅读:
    PCA (主成分分析)详解 (写给初学者) 结合matlab(转载)
    解释一下核主成分分析(Kernel Principal Component Analysis, KPCA)的公式推导过程(转载)
    主成分分析(PCA)原理详解(转载)
    神经网络的6种有监督训练算法
    PyCharm下载与激活
    matlab中元胞数组的创建与内容读取
    创新式开发探索(四) —— 探索式学习
    耐心,细心,贴心,静心
    使用 JsPlumb 绘制拓扑图的通用方法
    使用 amcharts 和 highcharts 绘制多曲线时间趋势图的通用方法
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173280.html
Copyright © 2011-2022 走看看