//Data
        public object GetDataObject(Type type, BodyType body = BodyType.Undefined, CallDescriptor call = null)
        {
            if (body == BodyType.Undefined)
            {
                char firstCharacter = DataString.Trim().FirstOrDefault();
                switch (firstCharacter)
                {
                case '{':
                case '[':
                    body = BodyType.JSON;
                    break;

                case '<':
                    body = BodyType.XML;
                    break;

                default:
                    if (DataString.Contains("="))
                    {
                        body = BodyType.UrlEncoded;
                    }
                    break;
                }
            }

            switch (body)
            {
            case BodyType.JSON:
                JsonSerializerSettings settings = call?.JsonSerialization?.Request;
                if (settings != null)
                {
                    return(JsonConvert.DeserializeObject(DataString, type, settings));
                }
                else
                {
                    return(JsonConvert.DeserializeObject(DataString, type));
                }

            case BodyType.XML:
                return(XmlConvert.DeserializeObject(DataString, type));

            case BodyType.UrlEncoded:
                object targetObj = Activator.CreateInstance(type);
                foreach (PropertyInfo info in type.GetPropertiesCached())
                {
                    if (DataUrlEncoded.ContainsKey(info.Name))
                    {
                        info.SetValue(targetObj,
                                      ParameterConverter.Static.Parse(info.PropertyType, DataUrlEncoded[info.Name]));
                    }
                }
                return(targetObj);

            case BodyType.Raw:
                if (type == typeof(string))
                {
                    return(DataString);
                }
                else if (type == typeof(byte[]))
                {
                    return(Data);
                }
                else
                {
                    return(null);
                }

            case BodyType.MultipartStream:
                return(new MultiPartStream(DataStream));

            default:
                return(null);
            }
        }