Amanda.Client.AmandaClient.InvokeHelper C# (CSharp) Method

InvokeHelper() private method

private InvokeHelper ( string methodName, object args, object &result ) : bool
methodName string
args object
result object
return bool
        private bool InvokeHelper(string methodName, object[] args, out object result)
        {
            if (providers.ContainsKey(methodName))
            {
                var provider = providers[methodName].First();

                if (provider.Verb == "Get")
                {
                    for (int i = 0; i < args.Length; i++)
                    {
                        if (args[i].GetType() != Type.GetType(provider.Parameters.ElementAt(i).Value))
                        {
                            throw new ArgumentException();
                        }
                    }

                    var uriBuilder = new UriBuilder(new Uri(serviceUri + provider.Route));
                    var queryBuilder = new StringBuilder();

                    for (int i = 0; i < provider.Parameters.Count; i++)
                    {
                        queryBuilder.Append(provider.Parameters.ElementAt(i).Key + "=" + args[i]);
                        queryBuilder.Append("&");
                    }

                    uriBuilder.Query = queryBuilder.ToString().TrimEnd('&');

                    var res = Encoding.UTF8.GetString(client.DownloadData(uriBuilder.Uri));

                    if (res == String.Empty)
                    {
                        result = null;
                    }
                    else
                    {
                        if (Type.GetType(provider.Result).IsBasic())
                        {
                            result = Convert.ChangeType(res, Type.GetType(provider.Result));
                        }
                        else
                        {
                            var jss = new JavaScriptSerializer();
                            result = DeserializeObjectGraph(jss.Deserialize<dynamic>(res));
                        }
                    }

                    return true;
                }
                else
                {
                    var dict = new Dictionary<string, dynamic>();
                    for (int i = 0; i < provider.Parameters.Count; i++)
                    {
                        dict.Add(provider.Parameters.ElementAt(i).Key, args[i]);
                    }

                    var res = Encoding.UTF8.GetString(client.UploadData(serviceUri + provider.Route, Encoding.UTF8.GetBytes((new JavaScriptSerializer()).Serialize(dict))));

                    if (Type.GetType(provider.Result).IsBasic())
                    {
                        result = Convert.ChangeType(res, Type.GetType(provider.Result));
                    }
                    else
                    {
                        var jss = new JavaScriptSerializer();
                        result = DeserializeObjectGraph(jss.Deserialize<dynamic>(res));
                    }

                    return true;
                }
            }

            result = null;
            return false;
        }