将NSDictionary对象转换为Object

时间:2014-03-10 23:53:09

标签: objective-c json casting nsdictionary nsjsonserialization

我在iOS应用程序中从MVC API接收数据的JSON有效负载。 NSJSONSerialization然后将其序列化为一个对象。此对象包含一些属性以及数据对象列表。数据对象的类型为NSDictionary。我已经在ObjC中拥有了这些对象的类结构(我使用odata,所以我想将对象转换为它们的OdataObject等价物。)

所以我想知道如何将这些NSDictionary对象转换/转换为相应的OdataObject类(或任何对象)?

3 个答案:

答案 0 :(得分:2)

您无法将NSDictionary实例强制转换为OdataObject,您需要显式转换实例或在反序列化JSON时创建相应的实例。

您可以使用setValuesForKeysWithDictionary:使用KVC将字典内容推送到另一个实例。这种情况在这种情况下是否有效取决于OdataObject定义(来自github?不相信)和字典内容......

答案 1 :(得分:1)

为NSDictionary编写一个允许转换为OdataObject类的类类别?对不起,我不完全理解你在问什么,但如果你需要能够将NSDictionary转换为自定义对象,那么我推荐类别:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html

答案 2 :(得分:0)

是的,您无法将NSDictionary实例强制转换为自定义模型对象。为此,您需要编写转换代码。

1)创建一个继承具有必需属性的NSObject的类 2)合成所有属性
3)编写一个私钥keyMapping方法,该方法返回带有模型对象所需键的字典

-(NSDictionary *)keyMapping {

    return [[NSDictionary alloc] initWithObjectsAndKeys:
            @"key1", @"key1",
            @"key2", @"key2",
            @"key3", @"key3",
            @"key4", @"key4",
            @"key5", @"key5",
            nil];
}

4)编写类方法,它接受NSDictionary实例,作为参数并返回相同模型类的实例,其中包含来自NSDictionary的填充值(将您的字典传递给此方法)

+(ModelClass *)getModelClassObjectFromDictionary:(NSDictionary *)dictionary {

    ModelClass *obj = [[ModelClass alloc] init];
    NSDictionary *mapping = [obj jsonMapping];

    for (NSString *attribute in [mapping allKeys]){

        NSString *classProperty = [mapping objectForKey:attribute];
        NSString *attributeValue = [dictionary objectForKey:attribute];

        if (attributeValue!=nil&&!([attributeValue isKindOfClass:[NSNull class]])) {

            [obj setValue:attributeValue forKeyPath:classProperty];
        }
    }

    return obj;

}

多数民众赞成。希望这对你有所帮助。