Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON
Posted
技术标签:
【中文标题】Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON【英文标题】:Restkit 0.24.0: How to serialize objects (including to-many relationships) to JSON 【发布时间】:2015-01-03 16:18:24 【问题描述】:我有一个与我的 API 开发人员期望的完全不同的核心数据数据模型。 (由于应用程序的工作方式,我不能偏离这一点)
我已使用一些自定义类将 managedObjectModels 简化为所需的格式
一个转换器类,它启动并提供:(为便于阅读而简化)
包含***对象的 generalData 类 表示 GeneralData 中对多关系对象格式的 manyData 类 一个 otherData 类,它也包含 generalData 类中的多个关系对象,但与 manyData 类无关。这些是 generalData 属性:
-(NSString*) ID -(NSString*) 名称 -(NSString*) 位置 -(NSArray*) 许多数据对象 -(NSArray*) 其他数据对象
每个 manyData 和 OtherDataObject 依次拥有一些基本属性、它们自己的 ID 和 generalData ID。
我在 generalData 类中添加了以下请求映射:
+ (RKObjectMapping *)defineRequestMapping
RKObjectMapping * mapping = [RKObjectMapping mappingForClass:[generalData class]];
[mapping addAttributeMappingsFromDictionary:@
@"generalID": @"generalID",
@"generalName": @"generalName",
@"generalPosition": @"generalPosition",
@"generalManyData": @"generalManyData",
@"generalOtherData": @"generalOtherData"
];
return mapping;
然后像这样运行它:
RKObjectMapping *requestMapping = [[generalData defineRequestMapping] inverseMapping];
[objectManager addRequestDescriptor:[RKRequestDescriptor
requestDescriptorWithMapping:requestMapping objectClass:[generalData class] rootKeyPath:nil method:RKRequestMethodPOST]];
我还在 manyData 和 OtherData 类中添加了类似的 defineRequestMapping 类方法。
每次我尝试使用 Restkit 序列化 generalData 类时,我都会收到一条错误消息,告诉我它无法序列化未知的 manyData 类。如果我评论“generalManyData”和“generalOtherData”行,它可以工作并将其他 3 个属性序列化到身体。
我似乎找不到一个教程来清除我的思绪,并且此刻我对下一步该做什么感到困惑。我尝试使用关系映射,但这并没有让我更进一步。也许我忘记了什么?
【问题讨论】:
听起来您在“manyData”和“otherData”类中设置的映射存在问题。如果没有看到代码,我不能说什么,但我会设置断点并确保在这些类上设置了映射,并且这些类的所有对象映射都已正确配置以启动 嗯,我会调查一下。我认为我收到了 JSONWrite 错误,因为它无法遍历数组中的 manyData 对象。设置这些嵌套映射的绝对正确方法是什么? 您应该真正展示每个类的接口(带有属性)和映射。目前您的属性名称和映射名称不匹配... 【参考方案1】:查看RKRelationshipMapping
的文档
您需要将 generalManyData
的 RKRelationshipMapping 对象嵌套在 generalObject
的映射中,以建立两个类之间的多对多关系。如果有嵌套对象,简单的字符串值将不起作用。
RKObjectMapping *generalManyMapping = [RKObjectMapping mappingForClass:[generalData class]];];
[generalManyMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"generalManyData"
toKeyPath:@"generalManyData"
withMapping:@@"propertyOne" : @"propertyOne", @"propertyTwo" : @"propertyTwo"]];
【讨论】:
以上是关于Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON的主要内容,如果未能解决你的问题,请参考以下文章
RestKit 与 Core Data 多对多:它有效,但我做得对吗?