将 NSDictionary 对象转换为对象

Posted

技术标签:

【中文标题】将 NSDictionary 对象转换为对象【英文标题】:Convert NSDictionary object to Object 【发布时间】:2014-03-10 23:53:08 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

您不能将 NSDictionary 实例转换为 OdataObject,您需要在反序列化 JSON 时显式转换实例或创建适当的实例。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

是的,您不能将您的 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;


就是这样。希望这对您有所帮助。

【讨论】:

以上是关于将 NSDictionary 对象转换为对象的主要内容,如果未能解决你的问题,请参考以下文章

Obj-C:将对象数组转换为 NSDictionary 以与 JSONRepresentation 一起使用

plist中的NSdictionary对象需要是数组的数组,怎么转换?

将包含 NSArray 的 NSDictionary 转换为 JSON

转NSDictionary以及NSMutableDictionary的用法

将 NSDate 转换为 String 得到空对象

将 NSData 转换为 NSDictionary