我正在这样使用 AFNetwork:
NSMutableDictionary *parameters = ...;
NSLog(@">>> %@", parameters);
void (^successBlock)(AFHTTPRequestOperation *operation, id responseObject) = ^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"<<< %@", responseObject);
}
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPRequestOperation *operation = [manager POST:...
parameters:parameters.copy
constructingBodyWithBlock:...
success:successBlock
failure:...];
parameters
字典非常复杂,它包含一个字典数组,如下所示:
>>> {
columns = 3;
rows = 3;
time = 54;
invitees = "{(
{
email = \"A\";
firstName = B;
lastName = C;
phoneNumber = \"D\";
},
{
email = \"E\";
firstName = \"F\";
lastName = G;
phoneNumber = \"H\";
}
)}";
}
但是我的服务器和成功 block 都收到一个字典,其中每个属性都在不同的字典中,如下所示:
<<<
{
error = "-160";
result = {
errorPostReceived = {
columns = 3;
invitees = (
{
email = "A";
},
{
firstName = B;
},
{
lastName = C;
},
{
phoneNumber = "D";
},
{
email = "E";
},
{
firstName = "F";
},
{
lastName = G;
},
{
phoneNumber = "F";
}
);
rows = 3;
time = 54;
};
};
}
我怀疑 AFURLRequestSerialization.m
中的 AFQueryStringPairsFromKeyAndValue
但我无法弄清楚这里到底是什么问题。
最佳答案
multipart/form-data
请求需要一系列键值对(或文件或您有什么),但是与 invitees
关联的“值” key 似乎是 NSDictionary
的 description
,这将很难解析(因为它不符合任何既定标准)。
从理论上讲,您可以将该值设为字典的 JSON 表示形式,并在服务器端手动 json_decode
(如果您使用的是 PHP)。或者您可以使整个请求成为一个 JSON 请求,避免 multipart/form-data
和 JSON 的奇怪混合(尽管我意识到这可能是一个比您想考虑的更大的变化。)
但是 multipart/form-data
规范没有考虑嵌套字典的概念。
关于ios - AFNetworking 参数序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382696/