我在一个文件里用序列化和反序列化读取和写入文件了
但问题来了   我如果在同一个文件输入5个对象     它总是只读取第一个  后面的读不了
现在我的想法是    想让它读哪个就读哪个    无论有多少对象   
应该怎么实现
请教高手把代码告诉我:

解决方案 »

  1.   

    把5个对象都搞到一个LIST里面去 然后存储 不行么?
    都读出来再找!
      

  2.   

    如果只读第一个的话FOR里面加个break。。想读哪个就读哪个
    读出来后用泛型集合来存放数据。。
    然后通过索引或者键值访问。
      

  3.   

    很简单
    加上 <ArrayOfAccount xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    节点
    反序列化对象数组,然后你爱取哪个取哪个
      

  4.   

    数组...或则ArrayList List<???> 都可以.
      

  5.   

    写INI文件不行吗,根据键值想读哪个就读哪个。
      

  6.   

    可以将这5个对方放在dictionary或者hashtable里面,对应键值然后去读取
      

  7.   

    实现代码如下:            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[]序列化即可,需要代码的话另外提。
      

  8.   

    其实不用数组或者列表,也可以全部读出来:            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));