List<Class>列表序列化与反序列化

把自定义的Cameras类添加到列表中

在窗体关闭时序列化列表到.dat文件中

在窗体加载时把.dat文件的信息反序列化到列表里

序列化反序列化:新建BinarySerializer类

public void Serialize<T>(T o, string filePath)
{
try
{
BinaryFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, o);
stream.Flush();
stream.Close();
}
catch (Exception) { }
}

public T DeSerialize<T>(string filePath)
{
try
{
FileStream fs = new FileStream(filePath, FileMode.Open);
BinaryFormatter formatter = new BinaryFormatter();
T o = (T)formatter.Deserialize(fs);
fs.Close();
return o;
}
catch (Exception){ }
return default(T);
}

 

Cameras相机类:在类前要加[Serializable]!!

[Serializable]
public class Cameras
{
private string _cameraName;

public string CameraName
{
get { return _cameraName; }
set { _cameraName = value; }
}
private string _cameraIP;

public string CameraIP
{
get { return _cameraIP; }
set { _cameraIP = value; }
}

}

 

主窗口:

public List<Cameras> cameras = new List<Cameras>();

internal BinarySerializer bs = new BinarySerializer();

 

序列化列表函数:可以在窗体关闭事件调用

private void SerializeData()
{
string filename = "camerainform.dat";
bs.Serialize<System.Collections.Generic.List<Cameras>>(cameras, @"dat\" + filename);
}

 

反序列化函数:可以在窗体加载事件中调用,把序列化的信息载入进来

private void GetCameraInform()
{
if(File.Exists(@"dat\cameraInform.dat"))
{
cameras = bs.DeSerialize<System.Collections.Generic.List<Cameras>>(@"dat\cameraInform.dat");
for (int i = 0; i < cameras.Count; i++)
{
cameraname_combobox.Items.Add(cameras[i].CameraName);
}
}
}

 

posted @ 2020-09-15 17:04  Xinxin-fighting  阅读(487)  评论(0)    收藏  举报