将HashTable序列化为字符串和后退

时间:2013-11-18 00:43:34

标签: c# serialization

我正在尝试将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.

但是,如果有人有更有效的方法来做到这一点,我就是全心全意。

1 个答案:

答案 0 :(得分:4)

  1. Unicode编码是个问题。序列化字节由随机字节组成,包括用于unicode编码的非法字节。使用 System.Convert.ToBase64String System.Convert.FromBase64String 而不是 Encoding.Unicode.GetString Encoding.Unicode.GetBytes < /强>

  2. 但是你为什么要用字符串作为媒介呢?一个字节数组足以保存和加载数据。