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

时间:2014-02-06 08:07:22

标签: java json thrift thrift-protocol

我是节俭的新手。我需要将我的数据对象转换为带有JSON string序列化的Thrift JSON

我试过这种方式。

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

这是一个错误,object_name应该在TBase。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

  

这里是一个错误,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所期望的。

答案 1 :(得分:1)

如果您正在做的是以下情况,那么它应该有效。检查你是否这样做。员工是一个演示电话,你必须使用你的实际课程。

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);