Convert an object to a JSON string with thrift json serialization

匿名 (未验证) 提交于 2019-12-03 08:52:47

问题:

I'm new to the thrift. I need to convert my data object to a JSON string with Thrift JSON serialization.

I tried in this way.

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

In here is an error, that object_name should be in TBase. How can I resolve this ?

回答1:

In here is an error, that object_name should be in TBase.

Next time, please post the exact error message (use copy+paste), this makes it easier for all of us.

How can I resolve this?

Whatever you want to serialize with Thrift, must be an descendant of Thrift's TBase class. You achieve this by writing some Thrift IDL and save it as a file (e.g. MyDataStructs.thrift):

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

Next, you pass that file to the Thrift compiler and tell him to generate some C# code from it:

thrift  -gen csharp  MyDataStructs.thrift 

This gives you a class derived from 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   }  } 

This is what Thrift expects.



回答2:

If below is what your are doing then it should work. Check if you are doing this. Employee is a demo call here, you have to use your actual class.

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!