2014-01-13 5 views
3

Я использую JSON все время в моих программахИспользования RestKit для отображения моих объектов

в моей Android приложения, я использую Gson для deserialise JSON объектов, которые приходят с сервера.

Что я люблю Gson, является то, что все, что нужно сделать, это создать класс POJO с заданными атрибутами, и они отображаются автоматически с Gson.fromJSON(JsonString, POJO.class);

, и если я хочу, чтобы объекты, которые будут называться иначе, чем то, что они приходят с сервера, я просто добавляю аннотацию @SerializedName («имя сервера») `

Есть ли способ сделать это в 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 использует определение отображения, чтобы ограничить то, что время обработки и позволить применение структуры и гибкости в процесс отображения.

Вполне возможно, что вы могли бы использовать RKDynamicMapping и setObjectMappingForRepresentationBlock: анализировать поступающие данные в сочетании с известной мишенью класса и использовать отражение, чтобы проверить, что существуют переменные назначения ...

+0

мне нужно сделать отражение, или делает RestKit? –

+0

RestKit отражает тип данных переменных, чтобы определить, какие переводы требуются во время сопоставления, но он не отражает, какие переменные существуют, чтобы знать, что нужно отображать, - для этого нужно сказать, какие имена ключей должны отображаться. – Wain

+0

Почему RestKit не создала схему сопоставления по умолчанию, для которой она опирается на имена переменных для сопоставления, и если некоторые переменные отсутствуют, они остаются нулевыми или отбрасываются в зависимости от того, где они расположены (JSONvsClass)? –

Смежные вопросы