0

我有一个问题,我不确定如何有效地解决。我制作了一个可以通过 TCP 套接字处理多个客户端的服务器。这些客户端向服务器发送数据(多个不同的对象!)。服务器存储对象,然后将其重新发送给所有感兴趣的客户端。

现在,客户端收到一个二进制序列化的“对象”,它不知道这个对象是由什么类构成的。一种找出方法是对我知道它将作为客户端发送的所有可能的类进行反序列化。并检查它是否成功。但是,可以想象,当我以后有 50 个不同的类要反序列化时,当我通过套接字收到大量消息时,这将是非常低效的。

序列化发生在这段代码中,我由一个线程运行,目前只发送虚拟数据:

    public static void NotifyService()
    {
        Stream stream = client.GetStream();
        IFormatter formatter = new BinaryFormatter();
        while (true)
        {
            try
            {
                Class1 klas = new Class1();
                Class2 klasen = new Class2();
                formatter.Serialize(stream, klas);
                formatter.Serialize(stream, klasen);
            }
            catch (Exception e)
            {
                Console.WriteLine("Notifier got Exception, closing notify thread: " + e);
                break;
            }

        }
        stream.Close();
    }

现在的问题是:客户端正确反序列化我的对象的最有效方法是什么?

(还有其他方法可以按原样发送接收内容,使用 XML 和其他内容,但我想使用二进制序列化来处理对象)请记住,我对套接字/序列化通常很陌生。

4

1 回答 1

1

由于您使用的是二进制格式化程序,因此反序列化数据的最有效方法是使用Deserialize二进制格式化程序的方法。

此外,当您进行反序列化时,如果您想知道您的对象是哪种类型,您可以使用以下代码:

BinaryFormatter bf;
object obj =  bf.Deserialize(some_stream);
obj.GetType().Name;  // here you have the name of the class you just deserialized
于 2013-07-09T15:21:24.050 回答