C# 连载问题

C# 连载问题,c#,serialization,C#,Serialization,目前,我需要序列化一个包含更多我自己的对象类的对象。 但问题是我不想将它保存在文件中,然后将其检索到内存流中。 是否有任何方法可以直接将我的对象序列化到流中 我使用BinaryFormatter进行sealize。 首先,我使用MemoryStream直接获取序列化输出,但它给出了一个错误 在反序列化时。但后来我用一个文件序列化它,然后关闭它并 再次打开它,它工作得很好。但我想把它直接带到流中,因为 在我的程序中,我需要经常这样做,以便将其传递到网络客户端。和使用文件 反复使用可能会降低我的软件

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

我使用BinaryFormatter进行sealize。 首先,我使用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;
}

如果您正试图从同一
内存流
反序列化,您是否记得先返回到流的开头

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;
}

这是一个快速而肮脏的示例,它是一个前后序列化字符串的示例。这就是你想做的吗

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;

        }

这是一个快速而肮脏的示例,它是一个前后序列化字符串的示例。这就是你想做的吗

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;

        }

使用
MemoryStream
时会出现什么错误?您是说.Net吗?我想你是从你提到的类型的名字来的。你能确认吗?你得到的错误是什么?错误是“意外的文件结尾”@Huran:你没有提到你使用的语言/环境。根据您提到的类型名称,我猜您使用的是.NET,但您可能应该在问题上加上“.NET”或“c”。使用
MemoryStream
时会出现什么错误?您是在说.NET吗?我想你是从你提到的类型的名字来的。你能确认吗?你得到的错误是什么?错误是“意外的文件结尾”@Huran:你没有提到你使用的语言/环境。根据你提到的类型名称,我猜你正在使用.NET,但你可能应该在问题上加上“.NET”或“c”。你知道我是一个非常愚蠢的人,我怎么会忘记这一点。谢谢你,伙计。抱歉打扰大家了。+1特别提到了搜索,这似乎是OP的问题。@Harun,如果这个答案正确地解决了您的问题,请单击数字下的复选标记,将其标记为正确答案。这会给海报代表的答案打分,并帮助你自己获得“%accepted”分数,鼓励人们回答你的问题。你知道我是一个非常愚蠢的人,我怎么会忘记这一点。谢谢你,伙计。抱歉打扰大家了。+1特别提到了搜索,这似乎是OP的问题。@Harun,如果这个答案正确地解决了您的问题,请单击数字下的复选标记,将其标记为正确答案。这会给海报代表的答案打分,并帮助你自己获得“%accepted”分数,鼓励人们回答你的问题。