2014-01-13 204 views
3

我使用JSON在我的應用程序使用RestKit映射我的對象

在我的Android應用程序,我使用GSON到deserialise是來自服務器的JSON對象的所有時間。

我喜歡GSON什麼,是所有我需要做的是建立與給定屬性的POJO類和它們與Gson.fromJSON(JsonString, POJO.class);

自動映射,如果我想比什麼被命名爲不同的對象,他們從服務器到達,我只是添加註釋@SerializedName(「server'sName」)'

有沒有這樣的方式來做到這一點在RestKit? 手動命名所有屬性似乎非常繁瑣? 如果我添加/刪除/重命名屬性?

目前這是我的課

@interface Test 
@property (nonatomic,assign) int prop1; 
@property (nonatomic, assign) NSString *prop2; 
@end 

這是我的JSON:

{ "prop1":10, "prop2":"test"} 

這是我的映射

//map class component 
    RKObjectMapping *statsMapping = [RKObjectMapping mappingForClass:[Test class]]; 
    [statsMapping addAttributeMappingsFromDictionary:@{@"prop1":@"prop1",@"prop2":@"prop2"}]; 

    // Register our mappings with the provider using a response descriptor 
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping 
                          method:RKRequestMethodGET 
                         pathPattern:nil 
                          keyPath:nil 
                         statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
    [objectManager addResponseDescriptor:responseDescriptor]; 

我想什麼是RestKit映射到我的財產(如果它們都存在於JSON和我的課程中),而不用命名

回答

1

您可以修剪你的映射定義:

[statsMapping addAttributeMappingsFromArray:@[ @"prop1", @"prop2" ]]; 

RestKit使用映射定義來限制正在處理,並允許結構和靈活的應用到映射過程。

這有可能是你可以使用RKDynamicMappingsetObjectMappingForRepresentationBlock:來分析聯想輸入數據與已知目標類和使用反射來檢查目標存在變數......

+0

做我需要做的反射,或RestKit做到了嗎? –

+0

RestKit反映了變量的數據類型,以確定在映射過程中需要什麼樣的翻譯,但它並沒有反映出存在哪些變量來知道要映射哪些變量 - 它需要告知哪些鍵名映射。 – Wain

+0

爲什麼沒有RestKit創建一個「默認」映射方案,它依賴於要映射的變量的名稱,並且如果某些變量丟失,它們將保留爲零或丟棄,具體取決於它們的位置(JSONvsClass)? –