Пример #1
0
        private object DeserializeInternal(int depth)
        {
            if (++depth > _depthLimit)
            {
                throw Error.DepthLimitExceeded();
            }

            char?nextChar = _serializedValue.GetNextNonEmptyChar();

            if (!nextChar.HasValue)
            {
                return(null);
            }

            JavaScriptTypeResolver resolver = _serializer.TypeResolver;

            _serializedValue.MovePrev();
            if (IsNextElementDateTime())
            {
                return(DeserializeStringIntoDateTime());
            }

            if (IsNextElementObject(nextChar))
            {
                IDictionary <string, object> dict = DeserializeDictionary(depth);
                if (dict.ContainsKey(JavaScriptSerializer.ServerTypeFieldName))
                {
                    return(ObjectConverter.ConvertObject(dict,
                                                         (resolver == null) ? null : resolver.ResolveType(
                                                             dict[JavaScriptSerializer.ServerTypeFieldName].ToString()),
                                                         _serializer));
                }
                return(dict);
            }

            if (IsNextElementArray(nextChar))
            {
                return(DeserializeList(depth));
            }

            if (IsNextElementString(nextChar))
            {
                return(DeserializeString());
            }

            return(DeserializePrimitiveObject());
        }
Пример #2
0
        private static bool TryConvertObjectToType(object obj, Type type,
                                                   JavaScriptSerializer serializer, bool throwOnError, out object convertedObject)
        {
            if (obj == null)
            {
                if (type == typeof(char))
                {
                    convertedObject = '\0';
                    return(true);
                }
                else
                {
                    if (IsNonNullableValueType(type))
                    {
                        if (throwOnError)
                        {
                            throw Error.ArgumentNull("obj");
                        }
                        else
                        {
                            convertedObject = null;
                            return(false);
                        }
                    }
                    convertedObject = null;
                    return(true);
                }
            }
            if (obj.GetType() != type)
            {
                return(ObjectConverter.TryConvertObjectToTypeInternal(obj, type,
                                                                      serializer, throwOnError, out convertedObject));
            }

            convertedObject = obj;
            return(true);
        }
 public T ConvertToType <T>(object obj)
 {
     return((T)ObjectConverter.ConvertObject(obj, typeof(T), this));
 }
 public object ConvertToType(Type type, object obj)
 {
     return(ObjectConverter.ConvertObject(obj, type, this));
 }