二进制格式化器到字符串

时间:2012-06-05 19:06:23

标签: c#

    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>)

2 个答案:

答案 0 :(得分:7)

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

var memoryStream = new MemoryStream();
using(memoryStream)
{
    formatter.Serialize(memoryStream, list);
}
HiddenField1.Value = Convert.ToBase64String(memoryStream.ToArray());

答案 1 :(得分: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将像这样的二进制流转换为文本,因为它会以意想不到的方式中断。如果您希望结果采用类似文本的格式,请使用{@ 1}},如@ Alexei的答案。