Я в основном разработчик на c #, но мне было поручено устранить ошибку в mac-клиенте target-c. Я использую nsjsonserialization для сериализации объекта json.
Ошибка возникает при десериализации, если объект json содержит символ авторского права.
Мы использовали sbjson, и я переключился на nsjsonserialization, и это не решило проблему. Я не знаю, делаю ли я это неправильно или мне нужно использовать другую библиотеку сериализации. В C # я мог бы просто использовать newtonsoft. Есть ли аналогичная стандартная библиотека сериализации json для target-c, которую я должен использовать?
Вот код сериализации:
-(void)sendMessage:(NSString *)method:(NSDictionary *)inData {
NSDictionary *outData = [[NSDictionary alloc] init];
@try {
JsonServiceComm *newCom = [[JsonServiceComm alloc] init];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", host, method]];
NSData *json = [NSJSONSerialization dataWithJSONObject:inData options:kNilOptions error:nil];
json = [json subdataWithRange:NSMakeRange(0, [json length] - 1)];
NSString* jsData = [NSString stringWithUTF8String:[json bytes]];
NSString *outData = [newCom userSpaceRequest:url :jsData];
} @catch (NSException* ex) {
NSLog(@"%@", [ex reason]);
}
}
Вот где он десериализуется:
-(void)handleMessage:(NSString *)messageType message:(NSString *)message {
@autoreleasepool {
NSData *jsMessage = [message dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:jsMessage options:NSJSONReadingMutableLeaves error:&error];
}}
Если данные не содержат символа авторского права, * данные заполняются словарем значений, однако, если они содержат символ авторского права, * данные выходят равными нулю. Возвращенная ошибка: «Неожиданный конец файла при разборе объекта».