待序列化的类(结构体)
[Serializable]
public class MyObject
{
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
1.序列化 并存储在 dat文件中
string filename = "D://MyFile.dat";
MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "一些字符串";
//将obj类序列化
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(filename, FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
IFormatter: 位于 System.Runtime.Serialization下. 提供序列化格式的功能
BinaryFormatter():使用2进制格式序列化.
FileStream: 公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。
FileMode:指定操作系统打开文件的方式。
FileAccess:定义用于控制对文件的读访问、写访问或读/写访问的常数。
FileShare:包含用于控制其他 FileStream 对象对同一文件可以具有的访问类型的常数
formatter.Serialize():执行序列化
2.反序列化
//打开文件.执行反序列化
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(filename, FileMode.Open,
FileAccess.Read, FileShare.Read);
MyObject obj = (MyObject) formatter.Deserialize(stream);
MessageBox.Show(obj.str);
stream.Close();
[转]C# 类的序列化与反序列化 XML 的实现
2008-02-20 11:51
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Xml.Serialization; namespace ComLib.Model { /// <summary> /// 公司信息 /// </summary> public class ProductInfo { /// <summary> /// 公司 /// </summary> public string Company = ""; /// <summary> /// 联系人 /// </summary> public string Linkman = ""; /// <summary> /// 移动电话 /// </summary> public string MobilePhone = ""; /// <summary> /// 维护者 /// </summary> public string Vindicator = ""; /// <summary> /// 维护者手机 /// </summary> public string VindicatorMobilePhone = ""; /// <summary> /// 保修起始时间 /// </summary> public DateTime MaintainStartTime = DateTime.Now.AddYears(-10); /// <summary> /// 保修终止时间 /// </summary> public DateTime MaintainEndTime = DateTime.Now.AddYears(-10); /// <summary> /// 最后维修时间 /// </summary> public DateTime LastMaintainTime = DateTime.Now.AddYears(-10); /// <summary> /// 反序列化XML字符串为对象 /// </summary> /// <param name="xmlSource"></param> /// <returns></returns> public static ProductInfo Deserialize(string xmlSource) {
ProductInfo obj = new ProductInfo(); if (xmlSource.Trim() == "") return obj; try { XmlSerializer x = new XmlSerializer(typeof(ProductInfo)); Stream stream = Protocol.ProtocolHelper.GetStream(xmlSource); stream.Seek(0, SeekOrigin.Begin); obj = (ProductInfo)x.Deserialize(stream); stream.Close(); } catch { } return obj; } /// <summary> /// 序列化为XML字符串 /// </summary> /// <returns></returns> public string Serialize() { string strSource = ""; try { XmlSerializer s = new XmlSerializer(typeof(ProductInfo)); Stream stream = new MemoryStream(); s.Serialize(stream, this); stream.Seek(0, SeekOrigin.Begin); //这一点非常重要 否则无法读取 using (StreamReader reader = new StreamReader(stream)) { // Just read to the end. strSource = reader.ReadToEnd(); } } catch { } return strSource; } } } ------------------------------------------ C#对象序列化的基本使用 2007-12-10 10:05
|