Я принял проект от команды программистов.Наше приложение взаимодействует с нашим серверным бэкэндом, и мы начали делать это самостоятельно, я программирую на iOS и мой друг на сервере.Мы хотим делать только небольшие изменения.Один из методов нашего приложения импортирует список из внутренней сети компании и отправляет его на наш сервер, где он анализируется.Среди некоторой другой информации этот список находится в словаре под названием params.И затем он каким-то образом отправляется на наш сервер, используя в основном эти два метода (а этот класс является подклассом AFHTTPSessionManager):
- (void)importListRosterWithParams:(NSDictionary *)params
withSuccess:(void (^)(NSURLSessionDataTask *task, id response))success
andFailed:(void (^)(NSURLSessionDataTask *task, NSError *error))failed {
[self POST:@"ImportListRoster" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
[FMWeatherManager sharedManager].needToUpdateWeather = YES;
success(task, responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
NSLog(@"%s API call failed with code: %ld",__FUNCTION__,(long)response.statusCode);
failed(task, error);
}];
}
-(NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure {
if ([parameters isKindOfClass:[NSDictionary class]]) {
parameters = [self addBaseParmsToDictionary:parameters forMethod:URLString];
}
__block NSString *urlString = URLString;
NSURLSessionDataTask *task = [super POST:URLString parameters:parameters success:^(NSURLSessionDataTask *task, NSDictionary *jsonDict) {
if ([self.tasksID containsObject:@(task.taskIdentifier)]) {
[self.tasksID removeObject:@(task.taskIdentifier)];
success (task, jsonDict);
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
NSLog(@"%s API call failed with code: %ld",__FUNCTION__,(long)response.statusCode);
if (error.code == -1003) {
[self.tasksID removeAllObjects];
if (![urlString isEqualToString:@"GetWeather"] && ![urlString isEqualToString:@"GetInvitations"]) {
UIAlertController *alert = [FMErrorAlertControllerFactory createAlertWithType:ERROR_MESSAGE_NOT_INTERNET_CONNECTION];
if ([UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController) {
[[UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController presentViewController:alert animated:YES completion:nil];
} else {
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil];
}
}
failure(task, error);
} else if ([self.tasksID containsObject:@(task.taskIdentifier)]) {
[self.tasksID removeObject:@(task.taskIdentifier)];
failure(task, error);
}
}];
if(!self.tasksID) {
self.tasksID = [NSMutableArray array];
}
[self.tasksID addObject:@(task.taskIdentifier)];
return task;
}
Нам пришлось настроить структуру парсинга этой компании на сервере и в методах, ведущихк этому вызову сервера, потому что они изменились с простых списков текстовых файлов на список json.Я на стороне iOS правильно сохраняю эту строку JSON в словаре, и мой друг правильно запрограммировал парсинговую сторону на нашем сервере.Нормальная строка, такая как «Hello world», переданная этим методом на наш сервер, также без ошибок достигает соответствующего метода на сервере.Однако JSON этого не делает, и мы получаем ошибку сериализации на сервере.У тебя есть идеи почему?Если я углубляюсь в эти методы [super POST ...], это все больше сбивает с толку из-за моего ограниченного опыта работы с iOS и понимания, и я знаю, что они делают некоторую сериализацию (которую я даже не знаю точно, для чего она нужна....) но я не понимаю, почему простой текстовый файл JSON в моем словаре вызывает проблемы, а простая строка - нет.Есть идеи, как мы можем решить это?Я даже не знаю, где искать дальше ...
РЕДАКТИРОВАТЬ: И это в основном ошибка:
System.Runtime.Serialization.SerializationException: произошла ошибка десериализацииобъект типа Service.ImportListRoster.Ожидается конец элемента 'item' из пространства имен ''.Найден элемент 'fromDate' из пространства имен ''.---> System.Xml.XmlException: ожидается конец элемента 'item' из пространства имен ''.Найден элемент 'fromDate' из пространства имен ''.