使用Thrift JSON序列化将对象转换为JSON字符串

7

我是Thrift的新手。我需要将我的数据对象使用Thrift JSON序列化转换为JSON字符串

我尝试过以下方式。

TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory());
String json = serializer.toString(object_name);

这里出现了一个错误,object_name 应该在 TBase 中。我该如何解决?


你只能序列化在Thrift中定义的struct类型的对象。 - flyingfoxlee
2个回答

6

这里有一个错误,object_name 应该在 TBase 中。

下次请粘贴完整的错误信息,这样对我们所有人都更方便。

我该如何解决这个问题?

无论您想要使用 Thrift 进行序列化的内容是什么,都必须是 Thrift 的 TBase 类的后代。您可以通过编写一些 Thrift IDL 并将其保存为文件(例如 MyDataStructs.thrift)来实现此目的:

struct Employee {
    1: string name
    2: string surname
    3: i32 age
}

接下来,您将该文件传递给Thrift编译器,并告诉它从中生成一些C#代码:

thrift  -gen csharp  MyDataStructs.thrift

这将为您提供一个派生自TBase的类:
public partial class Employee : TBase
{
  private string _name;
  private string _surname;
  private int _age;

  // properties
  public string Name {... }
  public string Surname  { ... }
  public int Age  { ... }

  // some details omitted

  public void Read (TProtocol iprot)
  {
    // generated code for Read() method
  }

  public void Write(TProtocol oprot) {
    // generated code for Write() method
  }

  public override string ToString() {
    // generated code for ToString() method
  }

}

这是Thrift所期望的。


3
如果您正在执行以下操作,则应该可以正常工作。请检查您是否正在执行此操作。在此处“Employee”是演示调用,您必须使用实际的类。
Employee object_name= new Employee();
object_name.setAge(27);
object_name.setName("Test");

TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory());
String json = serializer.toString(object_name);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接