【发布时间】:2016-03-31 06:33:32
【问题描述】:
目标
我目前有保存信息的有效方法
然后我希望程序在退出后单击“加载”按钮时加载保存的状态。
然后我希望程序将数据显示在适当的位置
在表单中,我有两个 DataGridView,一个用于员工,另一个用于主管。
================================================ ===============
方法
我已将两个通用列表序列化为一个 .dat 文件
BinaryFormatter bFormatter = new BinaryFormatter();
using (FileStream fs = new FileStream(FILENAME, FileMode.OpenOrCreate))
{
bFormatter.Serialize(fs, employees);
bFormatter.Serialize(fs, supervisors);
}
到目前为止,.dat 文件中,我有 3 名员工和 2 名主管,我不确定如何提取信息并将它们放置到适当的位置
名单如下:
List<Employee> employees = new List<Employee>();
List<Supervisor> supervisors = new List<Supervisor>();
Employee e1 = new Employee(MemberJob.Employee, "Name", MemberSkills.CPlus | MemberSkills.CSharp, false);
Supervisor s1 = new Supervisor(MemberJob.Supervisor, "Another name", false);
employees.Add(e1);
supervisors.Add(s1);
================================================ ============================
尝试
我在 Internet 和 Stackoverflow 上进行了广泛的查看,但主要是它与我的上下文无关,或者他们使用的是我不想使用的 XML 格式。
我认为这只是复制 serialize 方法并将 bFormatter.Serialize(fs, employees); 更改为 bFormatter.Deserialize(fs, employees); 的情况,但我在反序列化列表后被困在做什么。
BinaryFormatter bFormatter = new BinaryFormatter();
FileStream fs = File.Open(FILENAME, FileMode.Open);
object obj = bFormatter.Deserialize(fs);
然后该对象带回我需要的数据,但我无法将object obj 数据转换为可用格式,如果可能,它会卡在object obj 中,我想尝试将其放回@987654329 @
【问题讨论】:
-
首先,这是一种存储数据的糟糕方式,因为您每次都必须保存两个列表。第二。稍加努力,我敢打赌 Supervisor 可以从 Employee 继承,这样你只需要保存一个列表。反序列化列表后,如果您使用的是 DGV。您可以将它们设置为数据源,数据将自动显示。
-
您是否在问如何从列表中填充 DataGridViews?或者如何反序列化成你需要的列表?
-
@Plutonix Supervisor 确实继承自 Employee,我如何将它们设置为数据源?但在此之前我将如何正确反序列化?
-
@Ciara - 如何反序列化到列表中
-
为什么不创建一个包含这两个列表的类。然后序列化类。
标签: c# serialization deserialization generic-list binaryformatter