6
    BinaryFormatter formatter = new BinaryFormatter();

    using (MemoryStream m = new MemoryStream())
    {
        formatter.Serialize(m, list);
        StreamReader sr = new StreamReader(m);
        HiddenField1.Value = sr.ReadToEnd();
    }

我得到 HiddenField1.Value 的空白值。不确定我在做什么是可能的?列表肯定已填充(is a List<T>)

4

2 回答 2

8

取决于您想要实现的目标......一种选择是将二进制流的内容显示为 Base64 字符串:

var memoryStream = new MemoryStream();
using(memoryStream)
{
    formatter.Serialize(memoryStream, list);
}
HiddenField1.Value = Convert.ToBase64String(memoryStream.ToArray());
于 2012-06-05T19:10:56.057 回答
3

将其更改为:

BinaryFormatter formatter = new BinaryFormatter();

using (MemoryStream m = new MemoryStream())
{
    formatter.Serialize(m, list);
    m.Position = 0;
    StreamReader sr = new StreamReader(m);
    HiddenField1.Value = sr.ReadToEnd();
}

在阅读之前,您需要将流的位置重置回开头。此外,您不应该使用 StreamReader 将这样的二进制流转换为文本,因为它会以意想不到的方式中断。如果您希望结果采用类似文本的格式,请使用Convert.ToBase64String@Alexei 的答案。

于 2012-06-05T19:09:00.833 回答