二进制序列化列表
binary serialization to list
我使用 this 信息通过二进制序列化将列表转换为 .txt。现在我想加载该文件,然后将其重新放入我的列表中。
这是我使用二进制序列化将列表转换为 .txt 的代码:
public void Save(string fileName)
{
FileStream fs = new FileStream(@"C:\" + fileName + ".txt", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, list);
fs.Close();
}
所以我的问题是;如何将此二进制文件转换回列表?
你可以这样做:
//Serialize: pass your object to this method to serialize it
public static void Serialize(object value, string path)
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream fStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
formatter.Serialize(fStream, value);
}
}
//Deserialize: Here is what you are looking for
public static object Deserialize(string path)
{
if (!System.IO.File.Exists(path)) { throw new NotImplementedException(); }
BinaryFormatter formatter = new BinaryFormatter();
using (Stream fStream = File.OpenRead(path))
{
return formatter.Deserialize(fStream);
}
}
然后使用这些方法:
string path = @"C:\" + fileName + ".txt";
Serialize(list, path);
var deserializedList = Deserialize(path);
谢谢@Hossein Narimani Rad,我使用了你的答案并做了一些修改(所以我更了解它)现在它可以工作了。
我的二进制序列化方法(保存)还是一样的。
这是我的二进制反序列化方法(加载):
public void Load(string fileName)
{
FileStream fs2 = new FileStream(fileName, FileMode.Open);
BinaryFormatter binformat = new BinaryFormatter();
if (fs2.Length == 0)
{
MessageBox.Show("List is empty");
}
else
{
LoadedList = (List<Object>)binformat.Deserialize(fs2);
fs2.Close();
List.Clear();
MessageBox.Show(Convert.ToString(LoadedList));
List.AddRange(LoadedList);
}
我知道我现在没有例外,但我这样理解得更好。
我还添加了一些代码,用新的 LoadedList 填充我的列表框。
我使用 this 信息通过二进制序列化将列表转换为 .txt。现在我想加载该文件,然后将其重新放入我的列表中。
这是我使用二进制序列化将列表转换为 .txt 的代码:
public void Save(string fileName)
{
FileStream fs = new FileStream(@"C:\" + fileName + ".txt", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, list);
fs.Close();
}
所以我的问题是;如何将此二进制文件转换回列表?
你可以这样做:
//Serialize: pass your object to this method to serialize it
public static void Serialize(object value, string path)
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream fStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
formatter.Serialize(fStream, value);
}
}
//Deserialize: Here is what you are looking for
public static object Deserialize(string path)
{
if (!System.IO.File.Exists(path)) { throw new NotImplementedException(); }
BinaryFormatter formatter = new BinaryFormatter();
using (Stream fStream = File.OpenRead(path))
{
return formatter.Deserialize(fStream);
}
}
然后使用这些方法:
string path = @"C:\" + fileName + ".txt";
Serialize(list, path);
var deserializedList = Deserialize(path);
谢谢@Hossein Narimani Rad,我使用了你的答案并做了一些修改(所以我更了解它)现在它可以工作了。
我的二进制序列化方法(保存)还是一样的。 这是我的二进制反序列化方法(加载):
public void Load(string fileName)
{
FileStream fs2 = new FileStream(fileName, FileMode.Open);
BinaryFormatter binformat = new BinaryFormatter();
if (fs2.Length == 0)
{
MessageBox.Show("List is empty");
}
else
{
LoadedList = (List<Object>)binformat.Deserialize(fs2);
fs2.Close();
List.Clear();
MessageBox.Show(Convert.ToString(LoadedList));
List.AddRange(LoadedList);
}
我知道我现在没有例外,但我这样理解得更好。 我还添加了一些代码,用新的 LoadedList 填充我的列表框。