【序列化】小结,逐步完善中

来源:互联网 发布:老电视如何看网络电视 编辑:程序博客网 时间:2024/06/13 23:08

网上查了资料,序列化有多种方法,这里我写上自己刚用过的一种生成XML文件的,有需要的朋友可以自己百度一下其他方法。

1.添加引用 “using System.Xml.Serialization;”;

2.用”[Serializable]“标记上要序列化的类,如下图

[Serializable]    public class LogService    {        public string strName;        public string strImage;        public string strToolNum;        public List<MainProperty> MainPropertyList;    }

3.将第2步中的要序列化的类“LogService”中的变量都赋值,包括“List<ChildProperty> ChildPropertyList”;

4.在需要生成XML序列化文件的代码位置处,例如“序列化”按钮的单击事件中添加如下代码:

XmlSerializer xs = new XmlSerializer(typeof(LogService));            Stream stream = new FileStream(保存路径(含xml文件名和后缀), FileMode.Create, FileAccess.Write, FileShare.Read);            xs.Serialize(stream, 赋值后的“LogService”实例);            //stream.Close();            stream.Dispose(); //销毁资源,否则资源将一直被占用导致无法【反序列化】;

到这,序列化一个XML文件就完成了,下面是将该文件反序列化;

5.反序列化代码很简单,如下:

XmlSerializer xs = new XmlSerializer(typeof(LogService));            Stream stream = new FileStream(文件保存路径(含xml文件名和后缀), FileMode.Open, FileAccess.Read, FileShare.Read);            LogService logS = xs.Deserialize(stream) as LogService;            stream.Dispose(); //销毁资源,否则资源将一直被占用导致无法【序列化】;

这样,序列化的文件就被读到“LogService”类的实例“logS”中了。


完整例子:

/// <summary>        /// 序列化指定类【CAllResult】        /// </summary>        /// <param name="savePath">序列化后的保存path(含.xml)</param>        /// <param name="cResult">待序列化的类</param>        /// <returns></returns>        public static int SerializeXml(string savePath, CAllResult cResult)        {            try            {                if (cResult.ProjectName == "")                {                    MessageBox.Show("未设置工程名!");                    return 2;                }                XmlSerializer xs = new XmlSerializer(typeof(CAllResult));                Stream stream = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read);                xs.Serialize(stream, cResult);                stream.Dispose();                return 0;            }            catch (System.Exception ex)            {                MessageBox.Show("序列化异常!" + ex.ToString());                return 1;            }        }        /// <summary>        /// 反序列化指定类【CAllResult】        /// </summary>        /// <param name="savePath">待反序列化的文件所在path(含.xml)</param>        /// <param name="cResult">反序列化后存储获得的数据的类</param>        /// <returns></returns>        public static int DeSerializeXml(string savePath, ref CAllResult cResult)        {            try            {                XmlSerializer xs = new XmlSerializer(typeof(CAllResult));                Stream stream = new FileStream(savePath, FileMode.Open, FileAccess.Read, FileShare.Read);                cResult = xs.Deserialize(stream) as CAllResult;                stream.Dispose();                return 0;            }            catch (System.Exception ex)            {                MessageBox.Show("反序列化异常!" + ex.ToString());                return 1;            }        }


0 0
原创粉丝点击