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
        }
  • 相关阅读:
    css 让div居中的代码
    纯Css实现两个Div占满整屏高度
    .net core api开发之从Postman发请求,接收不到参数值的问题记录
    win10下 IIS提示 处理程序“ExtensionlessUrlHandlerIntegrated4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    关于Linux fontconfig 字体库的坑
    前端性能优化方案,取自前端优化雅虎军规35条
    居中对齐
    sticky footer布局
    第30天 [js]写一个方法判断字符串是否为回文字符串
    第46天 [js] 写一个使两个整数进行交换的方法(不能使用临时变量)
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1911579.html
Copyright © 2011-2022 走看看