C#:存储通用列表<>文件流的对象

时间:2011-03-15 18:25:05

标签: c# list serialization filestream

我有List<Employee>对象,我想将此对象存储到文件流中。 (人类不易读取)

另外,我想从流中检索 List<Employee>以显示UI上的员工列表(我正在使用.NET Windows Forms应用程序)

我还想更新文件中的特定记录 有人可以告诉我,我会这样做吗?

如果序列化是唯一的方法,请告诉我如何在更新特定记录信息时使用它。

提前致谢。

2 个答案:

答案 0 :(得分:4)

使用序列化,您必须反序列化整个列表,然后将其序列化以执行更新操作。

如果您不希望输出具有人类可读性,BinaryFormatter是一种可行的方法。但是,如果您真的想让随机人员无法阅读,请考虑将一些编码算法应用于RSA等序列化数据。

使用BinaryFormatter进行序列化的示例:

using(FileStream fs = File.Open(FileName, FileMode.Create)) {
    try
    {
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, list);
    }
    catch (SerializationException)
    {
        // error handling
    }
}

反序列化:

using(FileStream fs = File.OpenRead(FileName)) {
try
    {
        BinaryFormatter bf = new BinaryFormatter();
        var list = (List<int>)bf.Deserialize(fs);
    }
    catch (SerializationException)
    {
        // Error handling
    }
}

编辑:稍微更改了代码示例

答案 1 :(得分:3)

除了使用序列化之外,另一个选择是使用No db4o之类的NoSql解决方案或此question中列出的任何解决方案。

这是一个blog post,讨论如何使用db4o。 (基于mvc,但也可以在winform应用程序中使用。

这将允许您利用linq的强大功能轻松查询5000条记录并更新对象而不会有太多麻烦。