Не могу сериализовать NSDate с CJJsonSerializer
Я пытаюсь добавить NSDate
в NSMutableDictionary
, а затем сделать это JSon
строка с этими методами:
NSMutableDictionary *d = [[NSMutableDictionary alloc]init];
[d setObject:[NSDate date] forKey:@"date"];
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:nil];
NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease];
И у меня есть пара вопросов:
1) jsondata
ноль, а затем requestBody
тоже ноль.
2) [NSDate date]
меня неправильно определили дату, а не как дата в моем iPhone:
2013-01-19 11:48:46 +0000
Любая помощь в этом вопросе?
Редактировать:
Когда я печатаю ошибку, я получил это сообщение:
Error Domain=TODO_DOMAIN Code=-1 "Cannot serialize data of type '__NSDate'" UserInfo=0x177850 {NSLocalizedDescription=Cannot serialize data of type '__NSDate'}
Это невозможно сделать?
2 ответа
Кажется очень маловероятным, что словарь не сможет вставить дату. Кажется, гораздо более вероятно, что проблема с CJSONSerializer
,
Попробуйте следующее:
NSMutableDictionary *d = [[NSMutableDictionary alloc]init];
[d setObject:[NSDate date] forKey:@"date"];
NSError *error = nil;
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:&error];
if (!jsonData)
{
NSLog(@"Error %@ while serialising to JSON");
}
NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease];
Вы должны увидеть ошибку, напечатанную на консоли.
ОБНОВИТЬ
Хорошо, похоже, мы были правы, и CJSONSerializer не может сериализовать даты. Так что вам нужно превратить вашу дату в строку. Это делается с помощью NSDateFormatter.
NSMutableDictionary *d = [[NSMutableDictionary alloc]init];
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
NSString *dateString = [dateFormatter stringFromDate:date];
[d setObject:dateString forKey:@"date"];
NSError *error = nil;
NSData *jsondata = [[CJSONSerializer serializer] serializeDictionary:d error:&error];
if (!jsonData)
{
NSLog(@"Error %@ while serialising to JSON");
}
NSString *requestBody = [[[NSString alloc] initWithData:jsondata encoding:NSUTF8StringEncoding] autorelease];
Надеюсь, теперь вы должны получить отформатированную дату в вашем JSON. Вы можете изменить формат, изменив передаваемую строку stringWithDate:
, Если вы делаете это много, вам понадобится один форматировщик даты, так как их создание обходится дорого.
JSON не поддерживает даты как стандартный тип, поэтому не существует автоматического способа сериализации NSDate
, Вы должны либо передать строковое представление даты, либо числовое представление метки времени. Например, вы можете сериализовать его как метку времени, выполнив что-то вроде:
[d setObject:@([[NSDate date] timeIntervalSince1970]) forKey:@"date"]