/// <summary>
        /// Returns a Redmine object.
        /// </summary>
        /// <typeparam name="T">The type of objects to retrieve.</typeparam>
        /// <param name=RedmineKeys.ID>The id of the object.</param>
        /// <param name="parameters">Optional filters and/or optional fetched data.</param>
        /// <param name="includeParams">Optional parameters for "include".</param>
        /// <returns>Returns the object of type T.</returns>
        /// <exception cref="Redmine.Net.Api.RedmineException"></exception>
        /// <exception cref="System.InvalidOperationException"> An error occurred during deserialization. The original exception is available
        /// using the System.Exception.InnerException property.</exception>
        /// <code>
        /// <example>
        ///     string issueId = "927";
        ///     NameValueCollection parameters = null;
        ///     Issue issue = redmineManager.GetObject&lt;Issue&gt;(issueId, parameters);
        /// </example>
        /// </code>
        public T GetObject <T>(string id, NameValueCollection parameters, IncludeParameters includeParams = IncludeParameters.none) where T : class, new()
        {
            var type = typeof(T);

            if (type == typeof(Issue))
            {
                if ((Array.IndexOf(parameters.AllKeys, "include") == -1) && (includeParams > IncludeParameters.none))
                {
                    StringBuilder buider = new StringBuilder();
                    if (includeParams.IsSet(IncludeParameters.children))
                    {
                        buider.Append(IncludeParameters.children.ToString() + ",");
                    }
                    if (includeParams.IsSet(IncludeParameters.attachments))
                    {
                        buider.Append(IncludeParameters.attachments.ToString() + ",");
                    }
                    if (includeParams.IsSet(IncludeParameters.relations))
                    {
                        buider.Append(IncludeParameters.relations.ToString() + ",");
                    }
                    if (includeParams.IsSet(IncludeParameters.changesets))
                    {
                        buider.Append(IncludeParameters.changesets.ToString() + ",");
                    }
                    if (includeParams.IsSet(IncludeParameters.journals))
                    {
                        buider.Append(IncludeParameters.journals.ToString() + ",");
                    }
                    if (includeParams.IsSet(IncludeParameters.watchers))
                    {
                        buider.Append(IncludeParameters.watchers.ToString() + ",");
                    }

                    parameters.Add("include", buider.ToString().Trim(','));
                }
            }

            return(!urls.ContainsKey(type) ? null : ExecuteDownload <T>(string.Format(REQUEST_FORMAT, host, urls[type], id), "GetObject<" + type.Name + ">", parameters));
        }
 public static bool IsSet(this IncludeParameters source, IncludeParameters flag)
 {
     return (source & flag) == flag;
 }
 public static bool IsSet(this IncludeParameters source, IncludeParameters flag)
 {
     return((source & flag) == flag);
 }