我在iOS应用程序中从MVC API接收数据的JSON有效负载。 NSJSONSerialization
然后将其序列化为一个对象。此对象包含一些属性以及数据对象列表。数据对象的类型为NSDictionary
。我已经在ObjC中拥有了这些对象的类结构(我使用odata,所以我想将对象转换为它们的OdataObject等价物。)
所以我想知道如何将这些NSDictionary
对象转换/转换为相应的OdataObject类(或任何对象)?
答案 0 :(得分:2)
您无法将NSDictionary
实例强制转换为OdataObject
,您需要显式转换实例或在反序列化JSON时创建相应的实例。
您可以使用setValuesForKeysWithDictionary:
使用KVC将字典内容推送到另一个实例。这种情况在这种情况下是否有效取决于OdataObject
定义(来自github?不相信)和字典内容......
答案 1 :(得分:1)
为NSDictionary编写一个允许转换为OdataObject类的类类别?对不起,我不完全理解你在问什么,但如果你需要能够将NSDictionary转换为自定义对象,那么我推荐类别:
答案 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;
}
多数民众赞成。希望这对你有所帮助。