如何在restkit 0.20中将NSManagedObject序列化为JSON?

时间:2013-02-05 08:50:26

标签: objective-c restkit

如何使用逆映射将NSManagedObject序列化为restkit 0.20中的JSON?

现在我不需要在任何地方发布任何内容。

我想手动创建对象MyObjectManaged。 设置一些属性,例如: ID, 名称, 年龄

使用现有映射将映射映射到JSON属性: 用户身份, 名字, 年龄

创建并打印JSON。

有可能吗?什么时候,怎么样?  提前感谢您的回答。

3 个答案:

答案 0 :(得分:7)

我最近一直试图做同样的事情:)我想保留映射,以便最终我可以连接到服务器,但也重复使用它们将对象序列化到文件。

我使用inverseMapping并通过RKMappingOperation运行它。

首先从JSON设置映射 - >核心数据对象

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]

希望有所帮助

答案 1 :(得分:3)

John Martin的回答似乎有效,但我遇到的问题是NSManagedObject实例带有一个用

设置的NSNumber属性
[NSNumber numberWithBool:boolvalue]

将json序列化为值1/0而不是true / false。 我们的后端无法像布尔一样处理数字。

我使用内置的RestKit解决了这个问题:RKObjectParameterization

使用follow方法,当有一个设置为bool的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];
}

答案 2 :(得分:0)

您可以访问RestKit wiki并查看object mapping。在“对象参数化和序列化”一节中,您将找到有关序列化和逆映射的信息。