把对象序列化到文件中和从文件中反序列化的管理类

 /// <summary>
    
/// 用于通用的加载或保存 Xml 序列化配置文件的类,该类通常适用于使用结构来保存配置数据的程序,例如数据源配置。
    
/// </summary>
    
/// <typeparam name="T">类型必须为可序列化的类,并且要实现 CollectBase 类,以及一个通用的索引器。</typeparam>
    
/// <example>
    
/// 把一个 DataTable 对象序列化到文件中。
    
/// DataTable table = ..
    
/// XmlConfigProvider<DataTable> cp = new XmlConfigProvider<DataTable>("test.txt");
    
/// cp.SetConfig(dt);
    
/// </example>
    public class XmlConfigProvider<T>
    {
        
private string filename = string.Empty;

        
public XmlConfigProvider(string filename)
        {
            
//如果目录不存在则创建这个目录。
            string fullPath = Path.GetFullPath(filename);
            FileInfo fileInfo 
= new FileInfo(fullPath);
            DirectoryInfo directoryInfo 
= new DirectoryInfo(fileInfo.DirectoryName);
            
if (!directoryInfo.Exists) directoryInfo.Create();
            
this.filename = fullPath;
        }

        
/// <summary>
        
/// 从文件中获取结构集合。
        
/// </summary>
        
/// <returns>返回在创建该类时使用的泛型结构或类。</returns>
        public T GetConfig()
        {
            
//如果文件不存在,则返回一个空的集合。
            T t;
            
if (!File.Exists(filename))
            {
                SetConfig(
default(T));
                
return GetConfig();
            }

            XmlSerializer ser 
= new XmlSerializer(typeof(T));
            TextReader reader 
= new StreamReader(filename);
            t 
= (T)ser.Deserialize(reader);
            reader.Close();

            SetConfig(t);
            
return t;
        }

        
/// <summary>
        
/// 向文件中写入结构集合。
        
/// </summary>
        
/// <param name="t">要写入文件中的泛型结构或类</param>
        public void SetConfig(T t)
        {
            XmlSerializer serializerObj 
= new XmlSerializer(typeof(T));
            TextWriter writer 
= new StreamWriter(filename);
            serializerObj.Serialize(writer, t);
            writer.Close();
        }

        
/// <summary>
        
/// 文件名。
        
/// </summary>
        public string FileName
        {
            
get { return filename; }
            
set { filename = value; }
        }
    }
原文地址:https://www.cnblogs.com/xiefang2008/p/1439194.html