序列化问题

时间:2010-01-04 19:24:14

标签: c# serialization

目前我需要序列化我的一个对象,其中包含更多我自己的类对象。 但问题是我不想将其保存在文件中然后将其检索到内存流中。 有没有办法直接将我的对象序列化为流。

我使用BinaryFormatter进行seializing。 首先,我直接使用MemoryStream来获取序列化输出,但它给出了错误 在反序列化时。但后来当我用文件序列化它然后关闭它 再次重新打开它,它完美无缺。但我想把它直接带入流中,因为 在我的程序中,我需要经常将其传递到网络客户端。并使用文件 反复可能会减慢我的软件速度。

希望我能解决我的问题。任何Sugetion?

2 个答案:

答案 0 :(得分:5)

如果您尝试从同一个MemoryStream反序列化,您是否记得首先回到流的开头?

var foo = "foo";
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
    // Serialize.
    formatter.Serialize(stream, foo);

    // Deserialize.
    stream.Seek(0, SeekOrigin.Begin);
    foo = formatter.Deserialize(stream) as string;
}

答案 1 :(得分:1)

这是一个快速而又脏的样本,来回串行化一个字符串。这是你想要做的吗?

static void Main(string[] args)
        {
            var str = "Hello World";

            var stream = Serialize(str);
            stream.Position = 0;
            var str2 = DeSerialize(stream);

            Console.WriteLine(str2);
            Console.ReadLine();
        }

        public static object DeSerialize(MemoryStream stream)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            return formatter.Deserialize(stream);
        }
        public static MemoryStream Serialize(object data)
        {

            MemoryStream streamMemory = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();

            formatter.Serialize(streamMemory, data);

            return streamMemory;

        }