AFNetworking send array en parameters JSON de request de publicación

Estoy intentando enviar parameters a mi server a través de POST, y funciona en general, pero no puedo entender cómo enviar JSON que contiene una matriz como uno de los parameters. Esto es lo que he intentado:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:myURL]]; NSMutableArray *objectsInCart = [NSMutableArray arrayWithCapacity:[_cart count]]; for(NSDictionary *dict in _cart) { NSObject *object = [dict objectForKey:@"object"]; NSDictionary *objectDict = @{@"product_id": [NSString stringWithFormat:@"%d",[object productID]], @"quantity": [NSString stringWithFormat:@"%d", [[dict objectForKey:@"count"] intValue]], @"store_id": [NSString stringWithFormat:@"%d", [Store getStoreID]], @"price": [NSString stringWithFormat:@"%.2f", [object price]]}; [objectsInCart addObject:objectDict]; } NSError *error = nil; NSString *cartJSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:objectsInCart options:NSJSONWritingPrettyPrinted error:&error] encoding:NSUTF8StringEncoding]; if(error) { NSLog(@"Error serializing cart to JSON: %@", [error description]); return; } NSDictionary *parameters = @{@"status": @"SUBMITTED", @"orders": cartJSON}; NSMutableURLRequest *orderRequest = [httpClient requestWithMethod:@"POST" path:@"/app/carts" parameters:parameters]; AFJSONRequestOperation *JSONOperation = [[AFJSONRequestOperation alloc] initWithRequest:orderRequest]; 

Sin embargo, recibo un error al enviar este JSON. ¡Cualquier sugerencia es muy apreciada!

No veo dónde está especificando que desea publicar JSON, por lo que estoy apostando que está enviando la encoding de parameters de URL de formulario, que es así, de acuerdo con la documentation AFHTTPClient:

Si un par de cadenas de consulta tiene un NSArray para su valor, cada miembro de la matriz se representará en el field[]=value1&field[]=value2 formatting field[]=value1&field[]=value2 . De lo contrario, el par se formateará como "field = value". Las representaciones de cadenas de ambas keys y valores se derivan usando el método -description . La cadena de consulta construida no incluye el? carácter utilizado para delimitar el componente de consulta.

Si su server realmente espera que publique JSON, agregue esto en la segunda línea para decirle a AFNetworking que:

 // AFNetworking 1.0 // httpClient is a subclass of AFHTTPClient httpClient.parameterEncoding = AFJSONParameterEncoding; // AFNetworking 2.0 // httpClient is a subclass of AFHTTPRequestOperationManager or AFHTTPSessionManager httpClient.requestSerializer = AFJSONRequestSerializer; 

Luego, eliminaría su llamada a NSJSONSerialization y simplemente insertía objectsInCart en el dictionary de parameters .

Una nota al margen: es normal subclass AFHTTPRequestOperationManager o AFHTTPSessionManager (AFNetworking 2.0) o AFHTTPClient (AFNetworking 1.0) y ponga este tipo de configuration en su método initWithBaseURL: (Es probable que no desee girar un nuevo cliente para cada request).