Hashtable userdata=new Hashtable();
userdata.Add("LoginUserCode",myDataSet.Tables[0].Rows[0]["grcode"].ToString());
userdata.Add("LoginUserName",myDataSet.Tables[0].Rows[0]["grname"].ToString()); MemoryStream stream=new MemoryStream();
BinaryFormatter b=new BinaryFormatter();
b.Serialize(stream,userdata,null);
byte[] tmp=new byte[stream.Length];
stream.Read(tmp,0,(int)stream.Length);



string b_data=Encoding.UTF8.GetString(tmp);;
stream.Close(); byte[] d_string=Encoding.UTF8.GetBytes(b_data);
MemoryStream m=new MemoryStream(d_string);
userdata=(Hashtable)b.Deserialize(m,null);
我是这样写的,但无法反序列化,说没有标准的2进制头,请大哥们指点!

解决方案 »

  1.   

    转化为字符串时,不要转换为UTF8,应该转换为base64string就可以了Convert.ToBase64String();
    Convert.ToBase64CharArray()还原
      

  2.   

    下面代码测试通过,没有问题 private void button3_Click(object sender, System.EventArgs e)
    {
    Hashtable ht = new Hashtable();
    ht.Add("a","aa");
    ht.Add("b","bb");
    IFormatter formatter = new BinaryFormatter();
       Stream stream = new FileStream(@"d:\test.bin", FileMode.Create, FileAccess.Write, FileShare.None);
       formatter.Serialize(stream, ht);
       stream.Close();
    } private void button4_Click(object sender, System.EventArgs e)
    {
    IFormatter formatter = new BinaryFormatter();
       Stream stream = new FileStream(@"d:\test.bin", FileMode.Open,FileAccess.Read, FileShare.Read);
       Hashtable ht = formatter.Deserialize(stream) as Hashtable;
       stream.Close();
    MessageBox.Show(ht["a"].ToString() + ht["b"].ToString());
    }
      

  3.   

    也就是说Hasttable本身的序列化和反序列化是没有问题的,可能是你自己代码处理的问题