• 分享一个对象序列化为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
        }
  • 相关阅读:
    使用 Nginx 内置 $http_user_agent 来区分( 电脑 pc、手机 mobile、平板 pad )端的内容访问
    原创《开源一个用 vue 写的树层级组件 vue-ztree》
    原创《weex面向未来的架构》
    原创《如何用vue来轻松的驾驭 html5 webapp的页面体验》
    Pdf Convert Image 的解决方案
    原创《分享(Angular 和 Vue)按需加载的项目实践优化方案》
    .npmrc 实用小技巧
    使用Tampermonkey,实现Gitlab禁用自我Merge的功能
    vue 之 render 函数不能渲染非全局自定义函数-方案
    反射、注解和动态代理
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1911579.html
Copyright © 2020-2023  润新知