Thrift C#API中是否有任何TSerializer
等效项。
我正在尝试使用Thrift序列化,然后将序列化的对象推入MQ,而不是使用Thrift传输机制。另一方面,我会将其反序列化为实际的消息。
我可以用Java来做,但是不能用C#来做。
最佳答案
Apache Thrift C#库当前没有TSerializer。但是,它确实有一个TMemoryBuffer(本质上是一种读/写内存的传输),可以完美地用于这种情况。创建一个TMemoryBuffer,构造一个协议(例如TBinaryProtocol),然后序列化您的消息并将其作为Blob从TMemoryBuffer发送。
例如:
TMemoryBuffer trans = new TMemoryBuffer(); //Transport
TProtocol proto = new TCompactProtocol(trans); //Protocol
PNWF.Trade trade = new PNWF.Trade(initStuff); //Message type (thrift struct)
trade.Write(proto); //Serialize the message to memory
byte[] bytes = trans.GetBuffer(); //Get the serialized message bytes
//SendAMQPMsg(bytes); //Send them!
要接收消息,您只需做相反的事情。 TMemoryBuffer有一个构造函数,可用于设置要读取的接收字节。
public TMemoryBuffer(byte[] buf);
然后,您只需在读取侧I / O堆栈上调用struct Read()方法即可。
与使用Java TSerializer帮助器相比,这并没有多得多的代码(也许更少),并且在Apache Thrift语言库中更通用。您可能会发现TMemoryBuffer是无处不在的方式!