• 写了个序列化反序列化助手


        /// <summary>
        /// 序列化助手
        /// 提供 BinaryFormatter,SoapFormatter,Xml序列化及相应序列化至文件的方法。
        /// </summary>
        public static class SerializeHelper
        {
            /// <summary>
            /// 将一个对象序列化为二进制流
            /// </summary>
            /// <param name="value">欲序列化的对象</param>
            /// <returns>byte[] 二进制流</returns>
            public static byte[] BinarySerialize<T>(T value)
            {
                if (value == null) return null;
                byte[] serializedObject;
                MemoryStream ms = new MemoryStream();
                BinaryFormatter b = new BinaryFormatter();
                b.Serialize(ms, value);
                ms.Seek(0, 0);
                serializedObject = ms.ToArray();
                ms.Close();
                return serializedObject;
            }
    
            /// <summary>
            /// 将二进制流反序列化为一个对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="serializedObject"></param>
            /// <returns></returns>
            public static T BinaryDeserialize<T>(byte[] serializedObject)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    ms.Write(serializedObject, 0, serializedObject.Length);
                    ms.Seek(0, 0);
                    BinaryFormatter b = new BinaryFormatter();
                    return (T)b.Deserialize(ms);
                }
            }
    
            /// <summary>
            /// 将一个对象进行Soap序列化
            /// </summary>
            /// <param name="value">欲序列化的对象</param>
            /// <param name="endcodingType">字符编码</param>
            /// <returns>Soap数据流</returns>
            public static string SoapSerialize<T>(T value, Encoding endcodingType)
            {
                if (value == null) return null;
                string xmlResult;
                using (Stream stream = new MemoryStream())
                {
                    try
                    {
                        SoapFormatter sf = new SoapFormatter();
                        sf.Serialize(stream, value);
                    }
                    catch
                    {                    
                        throw;
                    }
                    stream.Position = 0;
                    byte[] b = new byte[stream.Length];
                    stream.Read(b, 0, (int)stream.Length);
    
                    xmlResult = endcodingType.GetString(b, 0, b.Length);
                }
                return xmlResult;
            }
    
            /// <summary>
            /// 反序列化Soap数据流
            /// </summary>
            /// <typeparam name="T">返回对象的类型</typeparam>
            /// <param name="imput">Soap数据流</param>
            /// <param name="encodingType">字符编码</param>
            /// <returns>对象</returns>
            public static T SoapDeserialize<T>(string imput, System.Text.Encoding encodingType)
            {
                using (StringReader sr = new StringReader(imput))
                {
                    byte[] b;
                    b = encodingType.GetBytes(imput);
                    Stream stream = new MemoryStream(b);
                    try
                    {
                        SoapFormatter sf = new SoapFormatter();
                        return (T)sf.Deserialize(stream);
                    }
                    catch 
                    {                    
                        throw;
                    }
                }
            }
    
            /// <summary>
            /// 将一个对象进行Xml序列化
            /// </summary>
            /// <typeparam name="T">欲序列化对象类型</typeparam>
            /// <param name="value">欲序列化的对象</param>
            /// <returns>>Xml数据流</returns>
            public static string XmlSerialize<T>(T value)
            {
                if (value == null) return null;
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Encoding = new UnicodeEncoding(false, false);
                settings.Indent = false;
                settings.OmitXmlDeclaration = false;
    
                using (StringWriter textWriter = new StringWriter())
                {
                    using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
                    {
                        serializer.Serialize(xmlWriter, value);
                    }
                    return textWriter.ToString();
                }
            }
    
            /// <summary>
            /// 反序列化Xml数据流
            /// </summary>
            /// <typeparam name="T">返回对象的类型</typeparam>
            /// <param name="xml">Xml数据流</param>
            /// <returns>对象</returns>
            public static T XmlDeserialize<T>(string xml)
            {
                if (string.IsNullOrEmpty(xml)) return default(T);
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                XmlReaderSettings settings = new XmlReaderSettings();
    
                using (StringReader textReader = new StringReader(xml))
                {
                    using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
                    {
                        return (T)serializer.Deserialize(xmlReader);
                    }
                }
            }
    
            /// <summary>
            /// 将一个对象序列化成一个文件
            /// </summary>
            /// <param name="value">欲序列化的对象</param>
            /// <param name="filePath">文件及路径</param>
            /// <returns>是否序列化成功</returns>
            public static bool FileBinarySerialize<T>(T value, string filePath)
            {
                if (value == null) return false;
                FileStream fileStream = null;
                try
                {
                    fileStream = new FileStream(filePath, FileMode.Create);
                    BinaryFormatter b = new BinaryFormatter();
                    b.Serialize(fileStream, value);
                }
                catch
                {
                    return false;
                    throw;
                }
                finally
                {
                    if (fileStream != null)
                        fileStream.Close();
                }
                return true;
            }
    
            /// <summary>
            /// 将一个文件反序列化(Binary)为一个对象
            /// </summary>
            /// <typeparam name="T">对象的类型</typeparam>
            /// <param name="filePath">文件及路径</param>
            /// <returns>对象</returns>
            public static T FileBinaryDeserialize<T>(string filePath)
            {
                FileStream fileStream = null;
                try
                {
                    if (File.Exists(filePath) == false)
                        throw new FileNotFoundException("未找到文件,反序列化失败!", filePath);
                    fileStream = new FileStream(filePath, FileMode.Open);
                    BinaryFormatter b = new BinaryFormatter();
                    return (T)b.Deserialize(fileStream);
                }
                catch
                {
                    throw;
                }
                finally
                {
                    if (fileStream != null)
                        fileStream.Close();
                }
            }
    
            /// <summary>
            /// 将一个对象序列化(Soap)成一个文件
            /// </summary>
            /// <typeparam name="T">对象的类型</typeparam>
            /// <param name="value">欲序列化的对象</param>
            /// <param name="endcodingType">字符编码</param>
            /// <param name="filePath">文件及路径</param>
            /// <returns>是否序列化成功</returns>
            public static bool FileSoapSerialize<T>(T value, Encoding endcodingType,string filePath)
            {
                if (value == null) return false;
                string xmlResult;
                using (Stream stream = new MemoryStream())
                {
                    try
                    {
                        SoapFormatter sf = new SoapFormatter();
                        sf.Serialize(stream, value);
                    }
                    catch
                    {
                        throw;
                    }
                    stream.Position = 0;
                    byte[] b = new byte[stream.Length];
                    stream.Read(b, 0, (int)stream.Length);
    
                    xmlResult = endcodingType.GetString(b, 0, b.Length);
    
                    using (StreamWriter sw = new StreamWriter(filePath))
                    {
                        sw.WriteLine(xmlResult);
                    }
                }
                return true;
            }
    
            /// <summary>
            /// 将一个文件反序列化(Soap)为一个对象
            /// </summary>
            /// <typeparam name="T">对象的类型</typeparam>
            /// <param name="filePath">文件及路径</param>
            /// <param name="encodingType">字符编码</param>
            /// <returns>对象</returns>
            public static T FileSoapDeserialize<T>(string filePath, System.Text.Encoding encodingType)
            {
                if (!File.Exists(filePath)) return default(T);
                using (StreamReader streamReader = new StreamReader(filePath))
                {
                    using (StringReader textReader = new StringReader(streamReader.ReadToEnd()))
                    {
                        byte[] b;
                        b = encodingType.GetBytes(textReader.ReadToEnd());
                        Stream stream = new MemoryStream(b);
                        try
                        {
                            SoapFormatter sf = new SoapFormatter();
                            return (T)sf.Deserialize(stream);
                        }
                        catch
                        {
                            throw;
                        }
                    }
                }
            }
    
            /// <summary>
            /// 将一个对象序列化(Xml)成一个文件
            /// </summary>
            /// <typeparam name="T">对象的类型</typeparam>
            /// <param name="value">欲序列化的对象</param>
            /// <param name="filePath">文件及路径</param>
            /// <returns>是否序列化成功</returns>
            public static bool FileXmlSerialize<T>(T value, string filePath)
            {
                if (value == null) return false;
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Encoding = new UnicodeEncoding(false, false);
                settings.Indent = false;
                settings.OmitXmlDeclaration = false;
    
                using (StringWriter textWriter = new StringWriter())
                {
                    using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
                    {
                        serializer.Serialize(xmlWriter, value);
                    }
                    using (StreamWriter sw =new StreamWriter(filePath))
                    {
                        sw.WriteLine(textWriter.ToString());
                    }
                }
                return true;
            }
    
            /// <summary>
            /// 将一个文件反序列化(Xml)为一个对象
            /// </summary>
            /// <typeparam name="T">对象的类型</typeparam>
            /// <param name="filePath">文件及路径</param>
            /// <returns>对象</returns>
            public static T FileXmlDeserialize<T>(string filePath)
            {
                if (!File.Exists(filePath)) return default(T);
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                XmlReaderSettings settings = new XmlReaderSettings();
    
                using (StreamReader sr = new StreamReader(filePath))
                {
                    using (StringReader textReader = new StringReader(sr.ReadToEnd()))
                    {
                        using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
                        {
                            return (T)serializer.Deserialize(xmlReader);
                        }
                    }
                }
            }
    
        }
  • 相关阅读:
    【嵌入式linux】(第三步):安装串口终端 (ubuntu安装minicom串口终端)
    vim常用命令总结
    usb调试
    查找当前文件夹内容
    Android SDK开发包国内下载地址
    ubuntu下svn使用指南
    Ubuntu vim显示行号语法高亮自动缩进
    android_handler(一)
    HDU 1241 Oil Deposits (DFS)
    计划
  • 原文地址:https://www.cnblogs.com/lindj0307/p/2602025.html
Copyright © 2020-2023  润新知