7

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

我尝试过这种方式。

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

这里有一个错误,object_name应该在TBase. 我该如何解决这个问题?

4

2 回答 2

6

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

下一次,请发布确切的错误消息(使用复制+粘贴),这对我们所有人来说都更容易。

我该如何解决这个问题?

无论你想用 Thrift 序列化什么,都必须是 ThriftTBase类的后代。您可以通过编写一些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 所期望的。

于 2014-02-06T19:40:32.370 回答
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);
于 2014-02-06T08:26:31.970 回答