zoukankan      html  css  js  c++  java
  • xml和对象直接的序列化和反序列化

    public class XmlSerializerHelper
        {
            /// <summary>
            /// 从字符串反序列化
            /// </summary>
            /// <typeparam name="T">要反序列化出的类型</typeparam>
            /// <param name="SerializerStr">要序列化的串</param>
            /// <param name="rootElementName">根节点元素名称</param>
            /// <returns>返回序列化出的对象</returns>
            public static T Deserializer<T>(string serializerStr, string rootElementName)
            {            
                XmlRootAttribute xmlRootAttribute = new XmlRootAttribute(rootElementName);
                xmlRootAttribute.Namespace = ExXmlDocument.NameSpace;
    
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T), xmlRootAttribute);
                StringReader sr = new StringReader(serializerStr);
                
                XmlReader xmlReader = XmlReader.Create(sr);
                return (T)xmlSerializer.Deserialize(xmlReader);
            }
    
            /// <summary>
            /// 从字符串反序列化
            /// </summary>
            /// <typeparam name="T">要反序列化出的类型</typeparam>
            /// <param name="SerializerStr">要序列化的串</param>        
            /// <returns>返回序列化出的对象</returns>
            public static T Deserializer<T>(string serializerStr)
            {
                return Deserializer<T>(serializerStr, "");
            }
    
            /// <summary>
            /// 从文件反序列化
            /// </summary>
            /// <typeparam name="T">要反序列化出的类型</typeparam>
            /// <param name="file">要序列化的文件</param>
            /// <param name="rootElementName">根节点元素名称</param>
            /// <returns>返回序列化出的对象</returns>
            public static T DeserializerFromFile<T>(string file, string rootElementName)
            {
                //
                //XmlReader xmlTextReader = XmlReader.Create(file);
                XmlTextReader xmlTextReader = new XmlTextReader(file);
                //Console.WriteLine(xmlTextReader.Encoding);
                //XmlReader xmlReader = XmlReader.Create(file);
                T result = (T)Deserializer<T>(xmlTextReader, rootElementName);
                xmlTextReader.Close();
                return result;
            }
    
            /// <summary>
            /// 从文件反序列化
            /// </summary>
            /// <typeparam name="T">要反序列化出的类型</typeparam>
            /// <param name="file">要序列化的文件</param>
            /// <param name="rootElementName">根节点元素名称</param>
            /// <returns>返回序列化出的对象</returns>
            public static T DeserializerFromFile<T>(string file)
            {
                return (T)DeserializerFromFile<T>(file, "");
            }        
    
            /// <summary>
            /// 从XmlReader反序列化
            /// </summary>
            /// <typeparam name="T">要反序列化出的类型</typeparam>
            /// <param name="SerializerStr">要反序列化的XmlReader对象</param>
            /// <param name="rootElementName">根节点元素名称</param>
            /// <returns>返回序列化出的对象</returns>
            public static T Deserializer<T>(XmlReader xmlReader, string rootElementName)
            {
                XmlRootAttribute xmlRootAttribute = new XmlRootAttribute(rootElementName);
                xmlRootAttribute.Namespace = ExXmlDocument.NameSpace;
    
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T), xmlRootAttribute);            
                return (T)xmlSerializer.Deserialize(xmlReader);
            }
    
            /// <summary>
            /// 从XmlReader反序列化
            /// </summary>
            /// <typeparam name="T">要反序列化出的类型</typeparam>
            /// <param name="SerializerStr">要反序列化的XmlReader对象</param>
            /// <param name="rootElementName">根节点元素名称</param>
            /// <returns>返回序列化出的对象</returns>
            public static T Deserializer<T>(XmlReader xmlReader)
            {
                return Deserializer<T>(xmlReader, "");
            }
    
            /// <summary>
            /// 序列化到字符串
            /// </summary>
            /// <typeparam name="T">要序列化的类型</typeparam>
            /// <param name="serializerObj">要序列化的对象</param>
            /// <param name="rootElementName">根节点的名称</param>
            /// <returns>序列化的串</returns>
            public static string Serializer<T>(T serializerObj, string rootElementName)
            {
                //根节点属性
                XmlRootAttribute xmlRootAttribute = new XmlRootAttribute(rootElementName);            
                xmlRootAttribute.Namespace = ExXmlDocument.NameSpace;            
                
                // 命名空间 
                XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
                xmlSerializerNamespaces.Add("", CommonLibrary.XML.ExXmlDocument.NameSpace);
    
                //建立序列化对象并序列化
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T), xmlRootAttribute);
    
                //内存流方式
                MemoryStream memoryStream = new MemoryStream();
                XmlTextWriter xmlSink = new XmlTextWriter(memoryStream, Encoding.UTF8);
                xmlSerializer.Serialize(xmlSink, serializerObj, xmlSerializerNamespaces);
                //内在流reader转码方式
                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
                System.IO.StreamReader reader = new System.IO.StreamReader(memoryStream, Encoding.UTF8);
                return reader.ReadToEnd();
                //内存流直接转码方式
                //byte[] utf8EncodedData = memoryStream.GetBuffer();
                //return System.Text.Encoding.UTF8.GetString(utf8EncodedData);
    
    
                ////旧序列化 经测试设置Encoding无效 一直默认为UTF16 此设置只对stream输出有效
                //StringBuilder sb = new StringBuilder();
                //XmlWriterSettings settings = new XmlWriterSettings();
                //settings.Encoding = Encoding.UTF8;
                //settings.Indent = true;
                //XmlWriter xw = XmlWriter.Create(sb, settings);
    
                //xmlSerializer.Serialize(xw, serializerObj, xmlSerializerNamespaces);
    
                //return sb.ToString();            
            }
    
            /// <summary>
            /// 序列化到字符串
            /// </summary>
            /// <typeparam name="T">要序列化的类型</typeparam>
            /// <param name="serializerObj">要序列化的对象</param>        
            /// <returns>序列化的串</returns>
            public static string Serializer<T>(T serializerObj)
            {
                return Serializer<T>(serializerObj, "");
            }
    
            /// <summary>
            /// 序列化到XmlWriter
            /// </summary>
            /// <typeparam name="T">要序列化的类型</typeparam>
            /// <param name="serializerObj">要序列化的对象</param>
            /// <param name="rootElementName">根元素的名称</param>
            /// <param name="xmlWriter">要写入序列化内容的对象 注意Encoding</param>
            public static void Serializer<T>(T serializerObj, string rootElementName, XmlWriter xmlWriter)
            {
                //根节点属性
                XmlRootAttribute xmlRootAttribute = new XmlRootAttribute(rootElementName);
                xmlRootAttribute.Namespace = ExXmlDocument.NameSpace;
    
                // 命名空间 
                XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
                xmlSerializerNamespaces.Add("", CommonLibrary.XML.ExXmlDocument.NameSpace);
    
                //建立序列化对象并序列化            
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T), xmlRootAttribute);
                xmlSerializer.Serialize(xmlWriter, serializerObj, xmlSerializerNamespaces);             
            }
    
            /// <summary>
            /// 从XmlWriter序列化
            /// </summary>
            /// <typeparam name="T">要序列化的类型</typeparam>
            /// <param name="serializerObj">要序列化的对象</param>        
            /// <param name="xmlWriter">要写入序列化内容的对象</param>
            public static void Serializer<T>(T serializerObj, XmlWriter xmlWriter)
            {
                Serializer<T>(serializerObj, "", xmlWriter);
            }
    
            /// <summary>
            /// 序列化到文件
            /// </summary>
            /// <typeparam name="T">要序列化的类型</typeparam>
            /// <param name="serializerObj">要序列化的对象</param>
            /// <param name="rootElementName">根元素的名称</param>
            /// <param name="file">要写入的文件</param>
            public static void SerializerToFile<T>(T serializerObj, string rootElementName, string file)
            {
                //用XML Writer
                //XmlWriterSettings xws = new XmlWriterSettings();
                //xws.Encoding = System.Text.Encoding.UTF8;            
                //XmlWriter xmlWriter = XmlWriter.Create(file, xws);
    
                //用XMLTextWriter
                XmlTextWriter xmlTextWriter = new XmlTextWriter(file, System.Text.Encoding.UTF8);
                xmlTextWriter.Formatting = Formatting.Indented;
                xmlTextWriter.Indentation = 1;
    
                Serializer<T>(serializerObj, rootElementName, xmlTextWriter);
                xmlTextWriter.Close();
            }
    
            /// <summary>
            /// 序列化到文件
            /// </summary>
            /// <typeparam name="T">要序列化的类型</typeparam>
            /// <param name="serializerObj">要序列化的对象</param>        
            /// <param name="file">要写入的文件</param>
            public static void SerializerToFile<T>(T serializerObj, string file)
            {            
                SerializerToFile<T>(serializerObj, "", file);
            }
        }
  • 相关阅读:
    每个Java开发人员都应该知道的4个Spring注解
    JVM中的动态语言支持简介
    深入探索Java设计模式(五)之构建器模式
    Java——MVC模式
    程序出了问题,报错只能参考
    查看电脑端口占用情况
    Java——参数传递
    Python——关于定义过程
    Java——super的使用
    关于如何查看论文是否被SCI或者EI收录
  • 原文地址:https://www.cnblogs.com/chengjunwei/p/2557630.html
Copyright © 2011-2022 走看看