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
        }
  • 相关阅读:
    【转】JSON.parse() Unexpected token i in JSON at position 2 报错问题
    修改json对象的每一个值
    浏览器各个版本和系统(chrome/safari/edge/qq/360)
    数据库书籍推荐排行榜
    git-将dev代码合并到test
    npm install报错
    slice()和splice()区别
    在Eclipse中使用JUnit4进行单元测试(初级篇)
    [转载]Jmeter那点事·ForEach和If控制器
    java语言写文件内容
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173280.html
Copyright © 2011-2022 走看看