3

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

现在我不需要在任何地方发布任何东西。

我想手动创建对象 MyObjectManaged。设置一些属性例如:id、name、age

使用现有的映射将它们映射到 JSON 属性:用户 ID、名字、年龄

创建和打印 JSON。

是否可以?什么时候是,怎么做?预先感谢您的回答。

4

3 回答 3

7

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

我使用 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]

希望有帮助

于 2013-08-16T14:05:23.113 回答
3

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];
}
于 2014-06-10T11:53:00.473 回答
0

您可以前往 RestKit wiki 并查看对象映射。在“对象参数化和序列化”段落中,您将找到有关序列化和反向映射的信息。

于 2013-02-06T11:51:32.617 回答