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
        }
  • 相关阅读:
    php Date()函数输出中文年月日时分秒
    jQuery动态添加删除与添加表行代码
    sql随机查询数据语句(NewID(),Rnd,Rand(),random())
    asp.net 逻辑操作符与(&&),或(||),非(!)
    php static 变量的例子
    asp.net C# int 类型在32/64位环境下取值范围无变化
    js保留小数点后N位的方法介绍
    [Java] LinkedHashMap 源码简要分析
    [Java] HashMap 源码简要分析
    [Java] Hashtable 源码简要分析
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173280.html
Copyright © 2011-2022 走看看