将 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