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是无处不在的方式!

08-18 18:17