TSerializer serializer = new TSerializer() in C#

msa*_*ero 0 c# java serialization thrift

TSerializerThrift C# API 中是否有任何等效项。

我正在尝试使用 thrift 序列化,然后将序列化的对象推送到 MQ,而不是使用 Thrift 传输机制。另一方面,我会将其反序列化为实际消息。

我可以在 Java 中完成,但不能在 C# 中完成。

cod*_*eSF 5

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!
Run Code Online (Sandbox Code Playgroud)

要接收消息,您只需执行相反的操作。TMemoryBuffer 有一个构造函数,您可以使用它来设置要读取的接收字节。

 public TMemoryBuffer(byte[] buf);
Run Code Online (Sandbox Code Playgroud)

然后您只需在读取端 I/O 堆栈上调用您的 struct Read() 方法。

这并不比使用 Java TSerializer 帮助程序多多少(可能更少),而且它在 Apache Thrift 语言库中更通用。您可能会发现 TMemoryBuffer 是无处不在的方式!