将Object转换为Bytes数组

时间:2014-11-06 16:39:47

标签: c# client-server

我有一台服务器使用TCP套接字与客户端进行通信。

我想从一个客户端(Sender)向服务器发送一个对象,该对象将此对象发送到另一个客户端(Receiver )

该对象包含不同类型的字段,如

Class Test {
      public string key;
      public int id;
      public string message;
      public Test ()
      {
         // constructor code
      }

}

我的问题是如何将对象转换为字节数组,并且在Receiver中接收此字节数组时如何执行相反的操作(从字节数组转换为对象)?

1 个答案:

答案 0 :(得分:1)

您需要serialize your object。在C#中有很多方法可以做到这一点。

您可以将对象序列化为二进制字节,XML或自定义表单。如果你想要二进制字节(显然这就是你要找的东西),你可以使用BinaryFormatter类。

来自MSDN示例:

Test test = new Test();
FileStream fs = new FileStream("output", FileMode.Create);
// Construct a BinaryFormatter and use it to serialize the data to the stream.
BinaryFormatter formatter = new BinaryFormatter();
try 
{
    formatter.Serialize(fs, test); 
}
catch (SerializationException e) 
{
    Console.WriteLine("Failed to serialize. Reason: " + e.Message);
    throw;
}
finally 
{
    fs.Close();
}

当然,您将使用套接字输出流代替FileStream对象来发送数据。

如果您正在考虑多个平台,我建议您使用基于XML的序列化,这样您就不会遇到与平台字节序(字节顺序)相关的问题。