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
        }
  • 相关阅读:
    软件研发:公司内部技术考试——算法编程题程序框架
    软件研发:公司内部技术考试——答题方法
    JConsole & JVisualVM远程监视Websphere服务器JVM的配置方法
    java.sql.SQLException: ORA-01578: ORACLE 数据块损坏问题解决办法
    ORA-00001: unique constraint (...) violated并不一定是数据冲突
    Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
    Windows平台使用RMAN命令自动删除Oracle过期归档日志的方法
    Oracle调整内存超出限制出现ORA-27100: shared memory realm already exists问题解决办法
    linux下查看最消耗CPU、内存的进程
    RMAN正确地删除Archivelog以及设置有备库的归档删除策略
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173280.html
Copyright © 2011-2022 走看看