我很难将序列化用于对象可能包含其他实例的对象。
例如对象: 人 NSString *名称 人*妈妈 这个JSON可能如下所示: {
"person": [
{
"name": "Blake Watters",
"mother": {
"name": "Jane Doe",
"mother": {
"name":"Jane Smith",
"age":65
}
}
}
]
}
我创建了映射: RKObjectMapping * personMapping = [RKObjectMapping mappingForClass:[Person class]];
[personMapping mapAttributes:@"name", nil];
[personMapping mapKeyPath:@"mother"
toRelationship:@"mother"
withMapping:personMapping];
如果我对此执行逆映射以便我可以序列化对象,则会在不断添加映射时出现递归映射错误。
我能找到的唯一答案是在关系上设置“序列化:否”。这允许它反转然后序列化,但序列化当然是缺少母对象。
有解决方法吗?在我将其反转后,我可以手动将此序列化添加回对象吗?
编辑:
看起来之后添加它可能是实现此目的的方法,因为以下代码似乎有效。虽然感觉必须有更好的方式。
// Map name
RKObjectMapping* nameMapping = [RKObjectMapping mappingForClass:[Name class]];
[nameMapping mapAttributes:@"first",@"last", nil];
// Map person
RKObjectMapping* personMapping = [RKObjectMapping mappingForClass:[Person class] ];
[personMapping mapAttributes:@"age", nil];
[personMapping mapKeyPath:@"name" toRelationship:@"name" withMapping:nameMapping];
// Don't serialize mother
[personMapping mapKeyPath:@"mother" toRelationship:@"mother" withMapping:personMapping serialize:NO];
// Connect our mapping to RestKit's mapping provider
[[RKObjectManager sharedManager].mappingProvider setMapping:personMapping forKeyPath:@"person"];
// invert the mapping
RKObjectMapping* personSerialization = [personMapping inverseMapping];
RKObjectMapping* mapping = [[RKObjectManager sharedManager].mappingProvider
serializationMappingForClass:[Person class]];
// Since mother wasn't serialized, add its relationship back in
[personSerialization mapKeyPath:@"mother"
toRelationship:@"mother"
withMapping:personSerialization];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:personSerialization
forClass:[Person class]];
谢谢, 亚当