private object ProcessResponse(HttpHelper httpHelper, string responseString, Type resultType, bool containsEtag, IList<int> batchEtags)
{
try
{
object result = null;
Exception exception = null;
if (httpHelper == null)
{
// batch row
result = DeserializeJson(responseString, resultType);
}
else
{
var response = httpHelper.HttpWebResponse;
if (response == null)
throw new InvalidOperationException(UnknownResponse);
if (response.ContentType.Contains("text/javascript") ||
response.ContentType.Contains("application/json"))
{
result = DeserializeJson(responseString, null);
exception = GetException(httpHelper, result);
if (exception == null)
{
if (resultType != null)
result = DeserializeJson(responseString, resultType);
}
}
else if (response.StatusCode == HttpStatusCode.OK && response.ContentType.Contains("text/plain"))
{
if (response.ResponseUri.AbsolutePath.EndsWith("/oauth/access_token"))
{
var body = new JsonObject();
foreach (var kvp in responseString.Split('&'))
{
var split = kvp.Split('=');
if (split.Length == 2)
body[split[0]] = split[1];
}
if (body.ContainsKey("expires"))
body["expires"] = Convert.ToInt64(body["expires"], CultureInfo.InvariantCulture);
result = DeserializeJson(body.ToString(), resultType);
return result;
}
else
{
throw new InvalidOperationException(UnknownResponse);
}
}
else
{
throw new InvalidOperationException(UnknownResponse);
}
}
if (exception == null)
{
if (containsEtag && httpHelper != null)
{
var json = new JsonObject();
var response = httpHelper.HttpWebResponse;
var headers = new JsonObject();
foreach (var headerName in response.Headers.AllKeys)
headers[headerName] = response.Headers[headerName];
json["headers"] = headers;
json["body"] = result;
return json;
}
return batchEtags == null ? result : ProcessBatchResponse(result, batchEtags);
}
throw exception;
}
catch (FacebookApiException)
{
throw;
}
catch (Exception)
{
if (httpHelper != null && httpHelper.InnerException != null)
throw httpHelper.InnerException;
throw;
}
}