我正在尝试将Hashtable序列化为字符串然后返回哈希表,但我的反序列化代码仍然失败。
反序列化:
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(hash.value);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
ms.Write (bytes,0,bytes.Length);
ms.Seek(0,System.IO.SeekOrigin.Begin);
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
Hashtable h = (Hashtable)bf.Deserialize(ms);
序列化:
MemoryStream ms = new MemoryStream();
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(ms, hash);
byte[] bt = ms.ToArray();
this.value=System.Text.Encoding.Unicode.GetString(bt);
这是我使用上述代码得到的错误:
EndOfStreamException: Failed to read past end of stream.
但是,如果有人有更有效的方法来做到这一点,我就是全心全意。
答案 0 :(得分:4)
Unicode编码是个问题。序列化字节由随机字节组成,包括用于unicode编码的非法字节。使用 System.Convert.ToBase64String 和 System.Convert.FromBase64String 而不是 Encoding.Unicode.GetString 和 Encoding.Unicode.GetBytes < /强>
但是你为什么要用字符串作为媒介呢?一个字节数组足以保存和加载数据。