【问题标题】:Using RestKit to map my objects使用 RestKit 映射我的对象
【发布时间】:2014-02-01 05:53:21
【问题描述】:

我一直在我的应用程序中使用 JSON

在我的 Android 应用程序中,我使用 Gson 反序列化来自服务器的 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 和我的类中)而不用名称命名它们

【问题讨论】:

    标签: ios json restkit restkit-0.20


    【解决方案1】:

    您可以使用以下方法修剪映射定义:

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

    RestKit 使用映射定义来限制正在处理的内容,并允许在映射过程中应用结构和灵活性。

    您可以使用RKDynamicMappingsetObjectMappingForRepresentationBlock: 来分析与已知目标类关联的传入数据,并使用反射检查目标变量是否存在...

    【讨论】:

    • 我需要做反射,还是 RestKit 做?
    • RestKit 反映变量的数据类型以确定映射期间需要哪些翻译,但它不反映存在哪些变量来知道要映射什么 - 它需要被告知要映射的键名.
    • 为什么 RestKit 没有创建一个“默认”映射方案,它依赖于要映射到的变量的名称,如果缺少某些变量,它们将被保留为 nil 或丢弃,具体取决于它们的位置位于(JSONvsClass)?
    • 可以创建RKObjectMapping 的子类,它在使用目标类实例化时执行此操作。您甚至可以实现它并提出拉取请求以将其添加到框架中。谷歌小组将是讨论潜在添加(而不是使用)的更好场所。
    • 实际上在进一步检查 RestKit 类之后,在 RestKit 中有一个类可以执行此操作,因此更改库以执行我想要的操作非常容易 -> 所以我创建了一个方法将类的属性转换为字符串 NSArray 并按照您的建议将其放入 addAttributeMappingsFromArray 中,整个过程花了 5 分钟!太糟糕了,他们没有考虑添加它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2013-05-24
    • 2014-12-30
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多