2014-02-06 65 views
3

我不熟悉节俭。我需要通过Thrift JSON序列化将我的数据对象转换为JSON string使用节俭json序列化将对象转换为JSON字符串

我试过这种方法。

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

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

+0

您只能序列化在thrift中定义的struct类型的对象。 – flyingfoxlee

回答

4

在这里是一个错误,那OBJECT_NAME应该在TBASE。

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

我该如何解决这个问题?

无论你想要与Thrift序列化,必须是Thrift的TBase类的后裔。通过编写一些Thrift IDL实现这一目标,并将其保存为一个文件(如MyDataStructs.thrift):

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

接下来,你该文件传递给节俭的编译器,并告诉他,以从它的一些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 
    } 

} 

这是节俭的期望。

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); 
相关问题