使用序列化/反序列化实现持久化

持久化最见的方式是使用数据库,数据库功能强大但使用起来也复杂。在一些需要轻量级存储的项目中,一般使用文件进行存储,这里介绍的方法是将对象序列化为xml,然后保存到文件。这种方法的好处是使用简单:将POCO保存到列表中,然后将整个列表序列化进行保存。对象的操作在内存中,只有在持久化时才进行保存。序列化和反序列化的代码非常简单:

···
///


/// 序列化对象
///

///
///
public static string SerializeObject(Object obj)
{
Type tp = obj.GetType();
var x = new XmlSerializer(tp);
var sb = new StringBuilder();
var sw = new StringWriter(sb);
x.Serialize(sw, obj);
return sw.ToString();
}

    /// 
    /// 反序列化
    /// 
    /// 
    /// 
    /// 
    public static object DeserializeObject(string content, Type tp)
    {
        try
        {
            using (StringReader srd1 = new StringReader(content))
            {
                var xd1 = new XmlSerializer(tp);
                var obj = xd1.Deserialize(srd1);
                return obj;
            }
            
        }
        catch (System.Exception ex)
        {

            return null;
        }

    }

    public static string ReadTextFile(string filepath)
    {
        if (System.IO.File.Exists(filepath))
        {
            var fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
            var sr = new StreamReader(fs, Encoding.Default);
            var res = sr.ReadToEnd();
            sr.Close();
            fs.Close();
            return res;
        }

        return "";
    }

    /// 
    /// 保存到文件
    /// 
    /// 
    /// 
    /// 
    public static string ReadTextFile(string filepath, Encoding encode)
    {
        if (System.IO.File.Exists(filepath))
        {
            var fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
            var sr = new StreamReader(fs, encode);
            var res = sr.ReadToEnd();
            sr.Close();
            fs.Close();
            return res;
        }

        return "";
    }

    /// 
    /// 从文件读出
    /// 
    /// 
    /// 
    public static void WriteToTextFile(string filename, string content)
    {
        File.WriteAllText(filename, content, Encoding.UTF8);

    }

···

使用起来也很简单,下面的例子是向文件保存对象和从文件中读取对象:

        public static void SaveTableInfo(string filename,TableInfo tableinfo)
        {
            var str = SerializeObject(tableinfo);
            WriteToTextFile(filename, str);
        }

        /// 
        /// 从文件中读取TableInfo的定义
        /// 
        /// 
        /// 
        public static TableInfo ReadTableInfo(string filename)
        {
            var str = ReadTextFile(filename);
            TableInfo tableinfo = DeserializeObject(str, typeof(TableInfo)) as TableInfo;
            return tableinfo;
        }

你可能感兴趣的:(使用序列化/反序列化实现持久化)