.Net框架对序列化机制具有非常好的支持,它提供了两个名字空间(namespace):System.Runtime.Serialization和System.Runtime.Serialization.Formatters以完成序列化机制的大部分功能。系列化这项技术可以应用在将程序产生的结果数据存储到文件系统中,但是它更主要的应用是在于.Net Remoting和Web服务的实现上。
但遗憾的是,这些技术不支持移动设备,如果你想序列化你的Object,只好自己做字符流的存取了。相关对象有:Stream、BinaryWriter、BinaryReader。。。
示例如下:
public void SaveOrLoadFile(bool bIsSave,string csPath)
{//保存或者读取文件数据
SingleLevel tmpLevel;
Stream stream;
int iCount,iTemp;
if ( bIsSave )
{
BinaryWriter BwS;
stream = File.Open(csPath, FileMode.Create);
BwS = new BinaryWriter(stream);
BwS.Write(Edition);
BwS.Write(m_SingleLevelList.Count);
for ( int i=0; i<m_SingleLevelList.Count; i++ )
{
tmpLevel = (SingleLevel)m_SingleLevelList[i];
BwS.Write(tmpLevel.GetName());
BwS.Write(tmpLevel.GetDate());
BwS.Write(tmpLevel.GetTime());
BwS.Write(tmpLevel.Info_Count());
for ( int j=0; j<tmpLevel.Info_Count(); j++ )
{
BwS.Write(tmpLevel.Info_GetAt(j).Head);
BwS.Write(tmpLevel.Info_GetAt(j).Content);
}
BwS.Write(tmpLevel.Process_Count());
for ( int j=0; j<tmpLevel.Process_Count(); j++ )
{
BwS.Write(tmpLevel.Process_GetAt(j).Head);
BwS.Write(tmpLevel.Process_GetAt(j).Content);
}
}
BwS.Close( );
stream.Close();
}
else
{
BinaryReader BwS;
stream = File.OpenRead(csPath);
BwS = new BinaryReader(stream);
Edition = BwS.ReadInt32();
iTemp = BwS.ReadInt32();
for ( int k=0; k<iTemp; k++ )
{
tmpLevel = new SingleLevel();
tmpLevel.Init(BwS.ReadString(),BwS.ReadString(),BwS.ReadString());
iCount = BwS.ReadInt32();
for ( int i=0; i<iCount; i++ )
{
tmpLevel.Info_Add(BwS.ReadString(),BwS.ReadString());
}
iCount = BwS.ReadInt32();
for ( int i=0; i<iCount; i++ )
{
tmpLevel.Process_Add(BwS.ReadString(),BwS.ReadString());
}
m_SingleLevelList.Add(tmpLevel);
}
BwS.Close( );
stream.Close();
}
}
但遗憾的是,这些技术不支持移动设备,如果你想序列化你的Object,只好自己做字符流的存取了。相关对象有:Stream、BinaryWriter、BinaryReader。。。
示例如下:
public void SaveOrLoadFile(bool bIsSave,string csPath)
{//保存或者读取文件数据
SingleLevel tmpLevel;
Stream stream;
int iCount,iTemp;
if ( bIsSave )
{
BinaryWriter BwS;
stream = File.Open(csPath, FileMode.Create);
BwS = new BinaryWriter(stream);
BwS.Write(Edition);
BwS.Write(m_SingleLevelList.Count);
for ( int i=0; i<m_SingleLevelList.Count; i++ )
{
tmpLevel = (SingleLevel)m_SingleLevelList[i];
BwS.Write(tmpLevel.GetName());
BwS.Write(tmpLevel.GetDate());
BwS.Write(tmpLevel.GetTime());
BwS.Write(tmpLevel.Info_Count());
for ( int j=0; j<tmpLevel.Info_Count(); j++ )
{
BwS.Write(tmpLevel.Info_GetAt(j).Head);
BwS.Write(tmpLevel.Info_GetAt(j).Content);
}
BwS.Write(tmpLevel.Process_Count());
for ( int j=0; j<tmpLevel.Process_Count(); j++ )
{
BwS.Write(tmpLevel.Process_GetAt(j).Head);
BwS.Write(tmpLevel.Process_GetAt(j).Content);
}
}
BwS.Close( );
stream.Close();
}
else
{
BinaryReader BwS;
stream = File.OpenRead(csPath);
BwS = new BinaryReader(stream);
Edition = BwS.ReadInt32();
iTemp = BwS.ReadInt32();
for ( int k=0; k<iTemp; k++ )
{
tmpLevel = new SingleLevel();
tmpLevel.Init(BwS.ReadString(),BwS.ReadString(),BwS.ReadString());
iCount = BwS.ReadInt32();
for ( int i=0; i<iCount; i++ )
{
tmpLevel.Info_Add(BwS.ReadString(),BwS.ReadString());
}
iCount = BwS.ReadInt32();
for ( int i=0; i<iCount; i++ )
{
tmpLevel.Process_Add(BwS.ReadString(),BwS.ReadString());
}
m_SingleLevelList.Add(tmpLevel);
}
BwS.Close( );
stream.Close();
}
}