iPhone アプリで Web サービス (JSON 形式で返される) を使用しています。すべてがうまく機能し、パラメーターを使用して Web サービスを呼び出し (以下の例では、パラメーターは JSON 形式を含む文字列です)、Web サービスから JSON の回答を取得できます。私の問題は、Web サービスがエスケープ文字 (UTF8) を含むパラメーターを受け取ることです。コードは次のとおりです。
// 1 - iOS app
NSString *parameters = @"&user={"Name":"aName","Date":"2012-04-24 02:24:13 +0000"}";
NSData *postData = [parameters dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *urlString = @"http://myWebService:80/AddUser";
NSURL *url = [NSURL URLWithString:urlString];
unsigned long long postLength = postData.length;
NSString *contentLength = [NSString stringWithFormat:@"%ull",postLength];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
// send the request...
------------------------------------------------------------------------------
// 2 - Web service
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void AddUser(string user)
{
Dictionary<string, string> userData = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(user);
string name = userData["Name"]; // OK here, name == "aName"
DateTime newDateTime = DateTime.Parse(userData["Date"]); // ERROR here because userData["Date"] returns "2012-04-24%2002:24:13%20+0000" so Parse method crash
// ... return the JSON answer
}
まず、受け取ったパラメーターにエスケープ文字がまだ含まれているのは正常ですか? はいの場合、文字列「user」を変更するにはどうすればよいですか。
{"Name":"aName","Date":"2012-04-24%2002:24:13%20+0000"}
それに:
{"Name":"aName","Date":"2012-04-24 02:24:13 +0000"}
それ以外の場合は、iOS アプリでリクエストをビルドするときに何か間違ったことをしましたか?