Ejemplo n.º 1
0
        public string ToJson() {
            string jsonResponse;
            var provider = DirectProvider.GetCurrent();
            var serializer = JsonSerializer.Create(Settings);
            
            var converter = provider.GetDefaultDateTimeConverter();
            if (converter != null) {
                // Default DateTime converter is added last therefore will not override the
                // one provided by the caller.
                serializer.Converters.Add(converter);
            }

            using (var stringWriter = new StringWriter()) {
                using (var jsonWriter = new JsonTextWriter(stringWriter)) {
#if DEBUG
                    jsonWriter.Formatting = Formatting.Indented;
#else
                    jsonWriter.Formatting = provider.Debug ? Formatting.Indented : Formatting.None;
#endif
                    serializer.Serialize(jsonWriter, this);
                    jsonResponse = stringWriter.ToString();
                }
            }

            return jsonResponse;
        }
Ejemplo n.º 2
0
        internal virtual void WriteResponse(DirectRequest directRequest, HttpResponseBase response)
        {
            var            method = DirectProvider.GetCurrent().GetMethod(directRequest.Action, directRequest.Method);
            DirectResponse directResponse;

            if (method.EventName != null)
            {
                directResponse = new DirectEventResponse(directRequest)
                {
                    Name     = method.EventName,
                    Data     = Data,
                    Settings = Settings
                };
            }
            else
            {
                directResponse = new DirectDataResponse(directRequest)
                {
                    Result   = Data,
                    Settings = Settings
                };
            }

            directResponse.Write(response, ContentType, ContentEncoding);
        }
Ejemplo n.º 3
0
 public static DirectProvider GetCurrent() {
     if (_current == null) {
         lock (_lockObj) {
             if (_current == null) {
                 _current = new DirectProvider();
                 _current.Configure();
             }
         }
     }
     return _current;
 }
Ejemplo n.º 4
0
 public static DirectProvider GetCurrent()
 {
     if (_current == null)
     {
         lock (_lockObj) {
             if (_current == null)
             {
                 _current = new DirectProvider();
                 _current.Configure();
             }
         }
     }
     return(_current);
 }
Ejemplo n.º 5
0
        private void WriteContent(HttpResponseBase response)
        {
            if (!String.IsNullOrEmpty(ContentType))
            {
                response.ContentType = ContentType;
            }
            else
            {
                response.ContentType = "application/json";
            }
            if (ContentEncoding != null)
            {
                response.ContentEncoding = ContentEncoding;
            }

            if (Data != null)
            {
                if (Data is String)
                {
                    // write strings directly to avoid double quotes around them caused by JsonSerializer
                    response.Write(Data);
                }
                else
                {
                    using (JsonWriter writer = new JsonTextWriter(response.Output)) {
                        var provider   = DirectProvider.GetCurrent();
                        var serializer = JsonSerializer.Create(Settings);

                        var converter = provider.GetDefaultDateTimeConverter();
                        if (converter != null)
                        {
                            serializer.Converters.Add(converter);
                        }
#if DEBUG
                        writer.Formatting = Formatting.Indented;
#else
                        writer.Formatting = provider.Debug ? Formatting.Indented : Formatting.None;
#endif
                        serializer.Serialize(writer, Data);
                    }
                }
            }
        }
Ejemplo n.º 6
0
 internal static DirectProvider GetCurrentProvider()
 {
     if (_currentProvider == null) {
         lock (_syncLock) {
             if (_currentProvider == null) {
                 _currentProvider = new DirectProvider {
                     Name = DirectConfig.ProviderName,
                     Namespace = DirectConfig.Namespace,
                     Buffer = DirectConfig.Buffer
                 };
             }
         }
     }
     return _currentProvider;
 }
        public DirectValueProvider(DirectRequest directRequest, ParameterDescriptor[] parameterDescriptors)
        {
            int paramCount = parameterDescriptors.Length;

            Object[] data = directRequest.Data;

            DirectMethod directMethod       = DirectProvider.GetCurrent().GetMethod(directRequest.Action, directRequest.Method);
            bool         usesNamedArguments = (directMethod != null && directMethod.UsesNamedArguments);

            if (paramCount > 0)
            {
                if (usesNamedArguments)   // named arguments. match params by name
                {
                    var dataObj = data[0] as JObject;

                    for (int i = 0; i < paramCount; i++)
                    {
                        string pName = parameterDescriptors[i].ParameterName;
                        Type   pType = parameterDescriptors[i].ParameterType;
                        JToken value = dataObj != null?dataObj.SelectToken(pName) : null;

                        object rawValue = null;

                        if (value != null && value.Type != JTokenType.Null && value.Type != JTokenType.Undefined)
                        {
                            Type vType = value.GetType();
                            if (vType == typeof(JObject) && pType != typeof(JObject) ||
                                vType == typeof(JArray) && pType != typeof(JArray))
                            {
                                rawValue = JsonConvert.DeserializeObject(value.ToString(), pType);
                            }
                            else
                            {
                                rawValue = Convert.ChangeType(value.ToString(), pType);
                            }
                        }

                        string attemptedValue = Convert.ToString(rawValue, CultureInfo.InvariantCulture);
                        _values.Add(pName, new ValueProviderResult(rawValue, attemptedValue, CultureInfo.InvariantCulture));
                    }
                }
                else
                {
                    for (int i = 0; i < parameterDescriptors.Length; i++)
                    {
                        object rawValue = data[i];

                        if (rawValue != null)
                        {
                            Type vType = rawValue.GetType();
                            Type pType = parameterDescriptors[i].ParameterType;

                            // Deserialize only objects and arrays and let MVC handle everything else.
                            if (vType == typeof(JObject) && pType != typeof(JObject) ||
                                vType == typeof(JArray) && pType != typeof(JArray))
                            {
                                rawValue = JsonConvert.DeserializeObject(rawValue.ToString(), pType);
                            }
                        }

                        string attemptedValue = Convert.ToString(rawValue, CultureInfo.InvariantCulture);
                        _values.Add(parameterDescriptors[i].ParameterName,
                                    new ValueProviderResult(rawValue, attemptedValue, CultureInfo.InvariantCulture));
                    }
                }
            }
        }