如何使用逆映射将 NSManagedObject 序列化为 restkit 0.20 中的 JSON?
现在我不需要在任何地方发布任何东西。
我想手动创建对象 MyObjectManaged。设置一些属性例如:id、name、age
使用现有的映射将它们映射到 JSON 属性:用户 ID、名字、年龄
创建和打印 JSON。
是否可以?什么时候是,怎么做?预先感谢您的回答。
如何使用逆映射将 NSManagedObject 序列化为 restkit 0.20 中的 JSON?
现在我不需要在任何地方发布任何东西。
我想手动创建对象 MyObjectManaged。设置一些属性例如:id、name、age
使用现有的映射将它们映射到 JSON 属性:用户 ID、名字、年龄
创建和打印 JSON。
是否可以?什么时候是,怎么做?预先感谢您的回答。
我最近一直在尝试做同样的事情 :) 我想保留映射,以便最终我可以连接到服务器,但也可以重用它们来将对象序列化到文件中。
我使用 inverseMapping 并通过 RKMappingOperation 运行它。
首先从 JSON -> Core Data Object 设置您的映射
RKEntityMapping mapping = [RKEntityMapping mappingForEntityForName:@"MyManagedObject" inManagedObjectStore:rkManagedObjectStore];
[self.nodeMapping addAttributeMappingsFromDictionary:@{
@"userid": @"id",
@"first_name": @"name",
@"age": @"age"
}];
然后使用逆映射将您的对象实例(例如“myObject”)映射到字典:
NSMutableDictionary *jsonDict = [NSMutableDictionary dictionary];
RKObjectMappingOperationDataSource *dataSource = [RKObjectMappingOperationDataSource new];
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:myObject
destinationObject:jsonDict
mapping:[mapping inverseMapping]];
operation.dataSource = dataSource;
NSError *error = nil;
[operation performMapping:&error];
假设没有错误,您可以序列化字典:
NSData *data = [RKMIMETypeSerialization dataFromObject:jsonDict
MIMEType:RKMIMETypeJSON
error:&error];
不知道你想从那里用它做什么,但如果你想把它打印成一个字符串,你可以这样做:
NSString *jsonString = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding]
希望有帮助
John Martin 的回答似乎有效,但我遇到了问题,即 NSManagedObject 实例的 NSNumber 属性设置为
[NSNumber numberWithBool:boolvalue]
将 json 序列化为值 1/0 而不是 true/false。我们的后端无法将数字处理为布尔值。
我使用内置类的 RestKit 解决了这个问题:RKObjectParameterization
当有一个设置为布尔值的 NSNumber 属性时,使用以下方法我的 NSManagedObjects 被正确序列化。
+ (NSString *)getJsonObjectWithDescriptor:(RKRequestDescriptor *)requestDescriptor objectToParse:(id)objectToParse {
NSError *error = nil;
NSDictionary *jsonDict = [RKObjectParameterization parametersWithObject:objectToParse requestDescriptor:requestDescriptor error:&error];
NSData *data = [RKMIMETypeSerialization dataFromObject:jsonDict
MIMEType:RKMIMETypeJSON
error:&error];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
您可以前往 RestKit wiki 并查看对象映射。在“对象参数化和序列化”段落中,您将找到有关序列化和反向映射的信息。