zoukankan      html  css  js  c++  java
  • 分享一个对象序列化为XML和反序列化的扩展方法

        public static class XmlSerializerExtensions
        {
            
    #region Private fields
            
    private static readonly Dictionary<RuntimeTypeHandle, XmlSerializer> ms_serializers = new Dictionary<RuntimeTypeHandle, XmlSerializer>();
            
    #endregion

            
    #region Public methods
            
    /// <summary>
            
    /// 序列化对象为xml字符串
            
    /// </summary>
            
    /// <typeparam name = "T"></typeparam>
            
    /// <param name = "value"></param>
            
    /// <returns></returns>
            public static string ToXml<T>(this T value)
                
    where T : new()
            {
                var _serializer 
    = GetValue(typeof(T));
                
    using (var _stream = new MemoryStream())
                {
                    
    using (var _writer = new XmlTextWriter(_stream, new UTF8Encoding()))
                    {
                        _serializer.Serialize(_writer, value);
                        
    return Encoding.UTF8.GetString(_stream.ToArray());
                    }
                }
            }

            
    /// <summary>
            
    /// 反序列化xml字符串为对象
            
    /// </summary>
            
    /// <typeparam name = "T">要序列化成何种对象</typeparam>
            
    /// <param name = "srcString">xml字符串</param>
            
    /// <returns></returns>
            public static T FromXml<T>(this string srcString)
                
    where T : new()
            {
                var _serializer 
    = GetValue(typeof(T));
                
    using (var _stringReader = new StringReader(srcString))
                {
                    
    using (XmlReader _reader = new XmlTextReader(_stringReader))
                    {
                        
    return (T)_serializer.Deserialize(_reader);
                    }
                }
            }
            
    #endregion

            
    #region Private methods
            
    private static XmlSerializer GetValue(Type type)
            {
                XmlSerializer _serializer;
                
    if (!ms_serializers.TryGetValue(type.TypeHandle, out _serializer))
                {
                    
    lock (ms_serializers)
                    {
                        
    if (!ms_serializers.TryGetValue(type.TypeHandle, out _serializer))
                        {
                            _serializer 
    = new XmlSerializer(type);
                            ms_serializers.Add(type.TypeHandle, _serializer);
                        }
                    }
                }
                
    return _serializer;
            }
            
    #endregion
        }
  • 相关阅读:
    LeetCode: Longest Valid Parentheses 解题报告
    LeetCode: Generate Parentheses 解题报告
    Leetcode: LRU Cache 解题报告
    LeetCode: Maximal Rectangle 解题报告
    LeetCode: Min Stack 解题报告
    LeetCode: Restore IP Addresses 解题报告
    LeetCode: Longest Common Prefix 解题报告
    LeetCode: Regular Expression Matching 解题报告
    Python——rrdtool模块的安装
    python-xlsxwriter模块绘制表格
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1911579.html
Copyright © 2011-2022 走看看