2014-02-06 93 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); 
相關問題