网上查了资料,序列化有多种方法,这里我写上自己刚用过的一种生成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;
}
}