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

達成したい内容に応じて... 1 つのオプションは、バイナリ ストリームのコンテンツを 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 に答える