我从.NET服务中获取一个JSON对象,该服务的日期格式如下:/Date(1368825702750-0500)/
我需要能够将该格式反序列化为NSDate,然后使用不同的格式显示NSDate。
我正在使用RestKit,我似乎无法弄清楚如何告诉它使用正确的日期格式化程序。我知道有一个RKDotNetDateFormatter,但我无法弄清楚如何正确使用它。我在其他网站上看到的大多数示例都使用当前版本的RestKit中不再存在的方法和类。目前,我正在尝试将其设置如下:
RKDotNetDateFormatter *formatter = [RKDotNetDateFormatter dotNetDateFormatterWithTimeZone:[NSTimeZone systemTimeZone]];
[RKObjectMapping addDefaultDateFormatter:formatter];
[RKObjectMapping setPreferredDateFormatter:formatter];
此时我将JSON作为字符串,所以我正在执行以下操作来反序列化它:
MyDisplayEntity *infoMapped = [[MyDisplayEntity alloc] init];
RKMappingOperation* mapper = [[RKMappingOperation alloc] initWithSourceObject:object destinationObject:infoMapped mapping:[MyDisplayEntity responseMapping]];
mapper.dataSource = object;
[mapper performMapping:&error];
除了我的NSDates之外,似乎所有内容都被正确映射。
有没有人有一个如何正确反序列化这种格式的例子?
答案 0 :(得分:2)
您还可以直接在对象映射上配置日期和时间的处理方式(尽管您显示的全局设置也应该有效)。
将dateFormatters
属性设置为RKDotNetDateFormatter *formatter
(在数组中)。
打开跟踪日志记录以获取有关映射过程的更多详细信息也可能有所帮助:
RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);
答案 1 :(得分:0)
在深入研究源代码之后,我发现当我使用标准服务检索方法时,它似乎并不关心你对目标实体的映射是否完全正确。但是,使用RKMappingOperation要求它们完全正确。
这里看起来像是用户错误:P
答案 2 :(得分:0)
首先声明您的日期格式化对象
var dateFormater = RKDotNetDateFormatter()
将此日期格式化程序添加到defaultValueTransformer()和特定的RKEntityMapping / RKObjectMapping
RKValueTransformer.defaultValueTransformer().addValueTransformer(dateFormater)
btaMapping.valueTransformer = RKValueTransformer.defaultValueTransformer()