2014-02-06 1 views
3

저는 중고품에 익숙하지 않습니다. 내 데이터 개체를 JSON stringThrift JSON 직렬화로 변환해야합니다.절약 JSON 직렬화를 사용하여 개체를 JSON 문자열로 변환

이렇게 시도했습니다. 여기에서

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

object_nameTBase이어야한다는 오류이다. 이 문제를 어떻게 해결할 수 있습니까?

+0

드리프트에서 정의 된 struct 유형의 객체 만 serialize 할 수 있습니다. – flyingfoxlee

답변

4

는 OBJECT_NAME가 TBase이어야한다는 오류이다.

다음 번에는 정확한 오류 메시지 (copy + paste 사용)를 게시하십시오. 그러면 우리 모두가 쉽게 사용할 수 있습니다.

어떻게 해결할 수 있습니까?

Thrift로 serialize하려는 것은 Thrift의 TBase 클래스의 자손이어야합니다. 당신은 어떤 Thrift IDL를 작성하여이를 달성하고 파일로 (예를 들어 MyDataStructs.thrift를) 저장 :

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

다음, 당신은 드리프트 컴파일러에 해당 파일을 전달하고 그것에서 약간의 C# 코드를 생성하라고 :

thrift -gen csharp MyDataStructs.thrift 

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 
    } 

} 

이 드리프트가 기대하는 것입니다 :

이렇게하면 TBase에서 파생 된 클래스를 제공합니다.

1

아래의 내용이 귀하가하고있는 것이면 효과가 있습니다. 당신이 이것을하고 있는지 확인하십시오. 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); 
관련 문제