C#读取对象 请教高手 我在一个文件里用序列化和反序列化读取和写入文件了但问题来了 我如果在同一个文件输入5个对象 它总是只读取第一个 后面的读不了现在我的想法是 想让它读哪个就读哪个 无论有多少对象 应该怎么实现请教高手把代码告诉我: 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把5个对象都搞到一个LIST里面去 然后存储 不行么?都读出来再找! 如果只读第一个的话FOR里面加个break。。想读哪个就读哪个读出来后用泛型集合来存放数据。。然后通过索引或者键值访问。 很简单加上 <ArrayOfAccount xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">节点反序列化对象数组,然后你爱取哪个取哪个 数组...或则ArrayList List<???> 都可以. 写INI文件不行吗,根据键值想读哪个就读哪个。 可以将这5个对方放在dictionary或者hashtable里面,对应键值然后去读取 实现代码如下: DataTable dt1 = new DataTable("table1"); DataTable dt2 = new DataTable("table2"); Object[] objs1 = {dt1,dt2}; MemoryStream ms1 = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms1, objs1); //序列化 ms1.Position = 0; //刚写完了这个流,当前指针在流的末尾,需要移动到开始位置才能读取。 Object[] objs2 = (Object[])bf.Deserialize(ms1); //反序列化 DataTable n_dt1 = (DataTable)objs2[0]; DataTable n_dt2 = (DataTable)objs2[1]; System.Windows.Forms.MessageBox.Show(n_dt1.TableName + ";" + n_dt2.TableName);如果你可以固定一种类型的对象,那就可以实现有多少读取多少,用List<T>来代替Object[]序列化即可,需要代码的话另外提。 其实不用数组或者列表,也可以全部读出来: DataTable dt1 = new DataTable("table1"); DataTable dt2 = new DataTable("table2"); MemoryStream ms1 = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms1, dt1); //序列化dt1 bf.Serialize(ms1, dt2); //序列化dt2 ms1.Position = 0; //刚写完了这个流,当前指针在流的末尾,需要移动到开始位置才能读取。 DataTable n_dt1 = (DataTable)bf.Deserialize(ms1); //反序列化dt1 DataTable n_dt2 = (DataTable)bf.Deserialize(ms1); //反序列化dt2 System.Windows.Forms.MessageBox.Show(n_dt1.TableName + ";" + n_dt2.TableName);如果读取时改用循环读取,你序列化的对象必须是唯一类型的才可以那样: DataTable dt1 = new DataTable("table1"); DataTable dt2 = new DataTable("table2"); MemoryStream ms1 = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms1, dt1); //序列化dt1 bf.Serialize(ms1, dt2); //序列化dt2 ms1.Position = 0; //刚写完了这个流,当前指针在流的末尾,需要移动到开始位置才能读取。 List<DataTable> n_dt = new List<DataTable>(); while (ms1.Position != ms1.Length) { n_dt.Add((DataTable)bf.Deserialize(ms1));//循环反序列化,并添加到列表中保存。 } StringBuilder dtnames = new StringBuilder(); //用来显示反序列化后对象信息。 foreach (DataTable dt in n_dt) { dtnames.Append(dt.TableName); dtnames.Append(";"); } System.Windows.Forms.MessageBox.Show(dtnames.ToString(0,dtnames.Length-1)); c# 任意控件作为 方法参数 怎么写? 网站导航怎么做啊 限制地址格式代码 关于mvc的一点理解,请大家指正 关于Interop.ADODB的问题,求求各位救救火啊 如何直接获取数据库的值三层里面 时间转换的问题? C#从mysql取数据并存入动态数组中 关于在.cs中写入javascript的问题,在线等待 请问!!!!!!!!!!! CYDHJ的专栏中“在C#中怎样让窗体一直占有焦点?”调用问题 我是个学生 对一个C#问题需要解决 谢谢帮助
都读出来再找!
读出来后用泛型集合来存放数据。。
然后通过索引或者键值访问。
加上 <ArrayOfAccount xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
节点
反序列化对象数组,然后你爱取哪个取哪个
DataTable dt2 = new DataTable("table2");
Object[] objs1 = {dt1,dt2};
MemoryStream ms1 = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms1, objs1); //序列化
ms1.Position = 0; //刚写完了这个流,当前指针在流的末尾,需要移动到开始位置才能读取。
Object[] objs2 = (Object[])bf.Deserialize(ms1); //反序列化 DataTable n_dt1 = (DataTable)objs2[0];
DataTable n_dt2 = (DataTable)objs2[1];
System.Windows.Forms.MessageBox.Show(n_dt1.TableName + ";" + n_dt2.TableName);
如果你可以固定一种类型的对象,那就可以实现有多少读取多少,用List<T>来代替Object[]序列化即可,需要代码的话另外提。
DataTable dt2 = new DataTable("table2");
MemoryStream ms1 = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms1, dt1); //序列化dt1
bf.Serialize(ms1, dt2); //序列化dt2
ms1.Position = 0; //刚写完了这个流,当前指针在流的末尾,需要移动到开始位置才能读取。
DataTable n_dt1 = (DataTable)bf.Deserialize(ms1); //反序列化dt1
DataTable n_dt2 = (DataTable)bf.Deserialize(ms1); //反序列化dt2
System.Windows.Forms.MessageBox.Show(n_dt1.TableName + ";" + n_dt2.TableName);如果读取时改用循环读取,你序列化的对象必须是唯一类型的才可以那样: DataTable dt1 = new DataTable("table1");
DataTable dt2 = new DataTable("table2");
MemoryStream ms1 = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms1, dt1); //序列化dt1
bf.Serialize(ms1, dt2); //序列化dt2
ms1.Position = 0; //刚写完了这个流,当前指针在流的末尾,需要移动到开始位置才能读取。
List<DataTable> n_dt = new List<DataTable>();
while (ms1.Position != ms1.Length)
{
n_dt.Add((DataTable)bf.Deserialize(ms1));//循环反序列化,并添加到列表中保存。
}
StringBuilder dtnames = new StringBuilder(); //用来显示反序列化后对象信息。
foreach (DataTable dt in n_dt)
{
dtnames.Append(dt.TableName);
dtnames.Append(";");
}
System.Windows.Forms.MessageBox.Show(dtnames.ToString(0,dtnames.Length-1));