Не могу сериализовать 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"]
Другие вопросы по тегам