【发布时间】:2011-06-19 09:40:38
【问题描述】:
我正在编写一个原型 TCP 连接,但在同质化要发送的数据时遇到了一些问题。
目前,我只发送字符串,但将来我们希望能够发送任何对象。
目前代码很简单,因为我认为所有内容都可以转换为字节数组:
void SendData(object headerObject, object bodyObject)
{
byte[] header = (byte[])headerObject; //strings at runtime,
byte[] body = (byte[])bodyObject; //invalid cast exception
// Unable to cast object of type 'System.String' to type 'System.Byte[]'.
...
}
这当然很容易解决
if( state.headerObject is System.String ){...}
问题是,如果我这样做,我需要检查在运行时不能转换为 byte[] 的每种类型的对象。
由于我不知道在运行时不能转换为 byte[] 的每个对象,所以这确实不是一个选项。
如何在 C# .NET 4.0 中将任何对象转换为字节数组?
【问题讨论】:
-
这在一般情况下不可能以任何有意义的方式实现(例如,考虑
FileStream的实例,或封装类似句柄的任何对象)。 -
您是否打算让所有客户端都运行 .NET?如果答案是否定的,您应该考虑其他形式的序列化(XML、JSON 等)