SerializerDataset(DataSet ds,Stream toStream)
{
    BinaryFormatter formatter = new BinaryFormatter();
    //MemoryStream ms = new MemoryStream();
    formatter.Serialize(toStream,data);
}
deserializeStream(Stream stream)
{
    DataSet ds1 = new DataSet("newds");
    BinaryFormatter formatter = new BinaryFormatter();
    ds1 = (DataSet) formatter.Deserialize(stream);//error
}
这是我对DataSet序列化和反序列化的代码,在反序列化时提示在分析完成之前就遇到
流结尾,不知为何。多谢帮助,在线等待!!

解决方案 »

  1.   

    using System;
    using System.IO;
    using System.Collections;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization;public class App 
    {
        [STAThread]
        static void Main() 
        {
            Serialize();
            Deserialize();
        }    static void Serialize() 
        {
            // Create a hashtable of values that will eventually be serialized.
            Hashtable addresses = new Hashtable();
            addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052");
            addresses.Add("Fred", "987 Pine Road, Phila., PA 19116");
            addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301");        // To serialize the hashtable and its key/value pairs,  
            // you must first open a stream for writing. 
            // In this case, use a file stream.
            FileStream fs = new FileStream("DataFile.dat", FileMode.Create);        // Construct a BinaryFormatter and use it to serialize the data to the stream.
            BinaryFormatter formatter = new BinaryFormatter();
            try 
            {
                formatter.Serialize(fs, addresses);
            }
            catch (SerializationException e) 
            {
                Console.WriteLine("Failed to serialize. Reason: " + e.Message);
                throw;
            }
            finally 
            {
                fs.Close();
            }
        }   
        static void Deserialize() 
        {
            // Declare the hashtable reference.
            Hashtable addresses  = null;        // Open the file containing the data that you want to deserialize.
            FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
            try 
            {
                BinaryFormatter formatter = new BinaryFormatter();            // Deserialize the hashtable from the file and 
                // assign the reference to the local variable.
                addresses = (Hashtable) formatter.Deserialize(fs);
            }
            catch (SerializationException e) 
            {
                Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
                throw;
            }
            finally 
            {
                fs.Close();
            }        // To prove that the table deserialized correctly, 
            // display the key/value pairs.
            foreach (DictionaryEntry de in addresses) 
            {
                Console.WriteLine("{0} lives at {1}.", de.Key, de.Value);
            }
        }
    }
      

  2.   

    不能直接用序列化的流,将流转换为byte[]就可以了。
      

  3.   

    首先这个类必须是可序列化的,例如DataTable,又或者下面这样:
    [Serializable]
        public class GradResume
    {
            /// <summary>
            /// 用户ID。
            /// </summary>
            public string UserID;

            /// <summary>
            /// 登录名。
            /// </summary>
            public string UserName;
            ....................... 序列化和反序列化的代码如下:
             using System.Runtime.Serialization;
    using System.Runtime.Serialization.Formatters;
    using System.Runtime.Serialization.Formatters.Binary;
    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    //新建类GradResume的实例
           GradResume aaa = new GradResume();
                    aaa.UserID = "123";
                    aaa.UserName = "eddiezhong";
                    //序列化对象
                    BinaryFormatter binaryFormatter = new BinaryFormatter();
                    System.IO.MemoryStream mStm1 = new System.IO.MemoryStream();
                    binaryFormatter.Serialize(mStm1,aaa);                byte[] tmpBytes = mStm1.ToArray();
                    mStm1.Close();
                    //tmpBytes就可以用来保存数据库了或者写文件
                    
      //读数据库或者文件文件重新获得tmpBytes                //反序列化二进制数组
                    System.IO.MemoryStream mStm2 = new System.IO.MemoryStream(tmpBytes);
                    mStm2.Position = 0;
                    object newObj = binaryFormatter.Deserialize(mStm2);
                    mStm2.Close();                //得到GradResume对象
                    GradResume bbb = (GradResume)newObj;
                    this.TextBox1.Text = bbb.UserID;
                    this.TextBox2.Text = bbb.UserName;
     
      

  4.   


    该DatasSet要在服务器和客户端间传送的。
    再这个过程中要求不能用文件的。