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
        }
  • 相关阅读:
    HDU 4681 STRING dp+暴力。
    HDU 4669 Mutiples on a circle 不知道该归为哪一类。
    poj 3411 Paid Roads很水的DFS
    poj 1724 ROADS 很水的dfs
    STL学习笔记(转,还是比较全的)
    4666 Hyperspace stl
    poj3308 Paratroopers 最大流 最小点权覆盖
    poj 3114 Countries in War
    2013 Multi-University Training Contest 4 部分解题报告
    2013 Multi-University Training Contest 3 部分解题报告
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1911579.html
Copyright © 2011-2022 走看看