ReadJson() public abstract method

Reads the JSON representation of the object.
public abstract ReadJson ( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer ) : object
reader JsonReader The to read from.
objectType System.Type Type of the object.
existingValue object The existing value of object being read.
serializer JsonSerializer The calling serializer.
return object
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
        {
            if (objectType == typeof(TimeSpan))
            {
                return(((DateTime)readConverter.ReadJson(reader, typeof(DateTime?), null, serializer)).TimeOfDay);
            }

            if (objectType == typeof(TimeSpan?))
            {
                var value = (DateTime?)readConverter.ReadJson(reader, typeof(DateTime?), null, serializer);
                return(value.HasValue ? (TimeSpan?)value.Value.TimeOfDay : null);
            }

            throw new Exception("Expected timestamp object value.");
        }
Beispiel #2
0
        private object CreateObject(JsonReader reader, Type objectType, object existingValue, JsonConverter memberConverter)
        {
            _level++;

              object value;
              JsonConverter converter;

              if (memberConverter != null)
              {
            return memberConverter.ReadJson(reader, objectType);
              }
              else if (objectType != null && HasClassConverter(objectType, out converter))
              {
            return converter.ReadJson(reader, objectType);
              }
              else if (objectType != null && HasMatchingConverter(objectType, out converter))
              {
            return converter.ReadJson(reader, objectType);
              }
              else if (objectType == typeof(JsonRaw))
              {
            return JsonRaw.Create(reader);
              }
              else
              {
            switch (reader.TokenType)
            {
              // populate a typed object or generic dictionary/array
              // depending upon whether an objectType was supplied
              case JsonToken.StartObject:
            if (objectType == null)
            {
              value = CreateJToken(reader);
            }
            else if (CollectionUtils.IsDictionaryType(objectType))
            {
              if (existingValue == null)
                value = CreateAndPopulateDictionary(reader, objectType);
              else
                value = PopulateDictionary(CollectionUtils.CreateDictionaryWrapper(existingValue), reader);
            }
            else
            {
              if (existingValue == null)
                value = CreateAndPopulateObject(reader, objectType);
              else
                value = PopulateObject(existingValue, reader, objectType);
            }
            break;
              case JsonToken.StartArray:
            if (objectType != null)
            {
              if (existingValue == null)
                value = CreateAndPopulateList(reader, objectType);
              else
                value = PopulateList(CollectionUtils.CreateCollectionWrapper(existingValue), ReflectionUtils.GetCollectionItemType(objectType), reader);
            }
            else
            {
              value = CreateJToken(reader);
            }
            break;
              case JsonToken.Integer:
              case JsonToken.Float:
              case JsonToken.String:
              case JsonToken.Boolean:
              case JsonToken.Date:
            value = EnsureType(reader.Value, objectType);
            break;
              case JsonToken.StartConstructor:
              case JsonToken.EndConstructor:
            string constructorName = reader.Value.ToString();

            value = constructorName;
            break;
              case JsonToken.Null:
              case JsonToken.Undefined:
            if (objectType == typeof(DBNull))
              value = DBNull.Value;
            else
              value = null;
            break;
              default:
            throw new JsonSerializationException("Unexpected token while deserializing object: " + reader.TokenType);
            }
              }

              _level--;

              return value;
        }
 private void SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, object target)
 {
   bool useExistingValue;
   object currentValue;
   JsonContract propertyContract;
   bool gottenCurrentValue;
   if (this.CalculatePropertyDetails(property, ref propertyConverter, containerContract, containerProperty, reader, target, out useExistingValue, out currentValue, out propertyContract, out gottenCurrentValue))
     return;
   object obj;
   if (propertyConverter != null && propertyConverter.CanRead)
   {
     if (!gottenCurrentValue && target != null && property.Readable)
       currentValue = property.ValueProvider.GetValue(target);
     obj = propertyConverter.ReadJson(reader, property.PropertyType, currentValue, (JsonSerializer) this.GetInternalSerializer());
   }
   else
     obj = this.CreateValueInternal(reader, property.PropertyType, propertyContract, property, containerContract, containerProperty, useExistingValue ? currentValue : (object) null);
   if (useExistingValue && obj == currentValue || !this.ShouldSetPropertyValue(property, obj))
     return;
   property.ValueProvider.SetValue(target, obj);
   if (property.SetIsSpecified == null)
     return;
   property.SetIsSpecified(target, (object) true);
 }
Beispiel #4
0
        private object CreateObject(JsonReader reader, Type objectType, object existingValue, JsonConverter memberConverter)
        {
            _level++;

            object        value;
            JsonConverter converter;

            if (memberConverter != null)
            {
                return(memberConverter.ReadJson(reader, objectType));
            }
            else if (objectType != null && HasClassConverter(objectType, out converter))
            {
                return(converter.ReadJson(reader, objectType));
            }
            else if (objectType != null && HasMatchingConverter(objectType, out converter))
            {
                return(converter.ReadJson(reader, objectType));
            }
            else if (objectType == typeof(JsonRaw))
            {
                return(JsonRaw.Create(reader));
            }
            else
            {
                switch (reader.TokenType)
                {
                // populate a typed object or generic dictionary/array
                // depending upon whether an objectType was supplied
                case JsonToken.StartObject:
                    if (objectType == null)
                    {
                        value = CreateJToken(reader);
                    }
                    else if (CollectionUtils.IsDictionaryType(objectType))
                    {
                        if (existingValue == null)
                        {
                            value = CreateAndPopulateDictionary(reader, objectType);
                        }
                        else
                        {
                            value = PopulateDictionary(CollectionUtils.CreateDictionaryWrapper(existingValue), reader);
                        }
                    }
                    else
                    {
                        if (existingValue == null)
                        {
                            value = CreateAndPopulateObject(reader, objectType);
                        }
                        else
                        {
                            value = PopulateObject(existingValue, reader, objectType);
                        }
                    }
                    break;

                case JsonToken.StartArray:
                    if (objectType != null)
                    {
                        if (existingValue == null)
                        {
                            value = CreateAndPopulateList(reader, objectType);
                        }
                        else
                        {
                            value = PopulateList(CollectionUtils.CreateCollectionWrapper(existingValue), ReflectionUtils.GetCollectionItemType(objectType), reader);
                        }
                    }
                    else
                    {
                        value = CreateJToken(reader);
                    }
                    break;

                case JsonToken.Integer:
                case JsonToken.Float:
                case JsonToken.String:
                case JsonToken.Boolean:
                case JsonToken.Date:
                    value = EnsureType(reader.Value, objectType);
                    break;

                case JsonToken.StartConstructor:
                case JsonToken.EndConstructor:
                    string constructorName = reader.Value.ToString();

                    value = constructorName;
                    break;

                case JsonToken.Null:
                case JsonToken.Undefined:
                    if (objectType == typeof(DBNull))
                    {
                        value = DBNull.Value;
                    }
                    else
                    {
                        value = null;
                    }
                    break;

                default:
                    throw new JsonSerializationException("Unexpected token while deserializing object: " + reader.TokenType);
                }
            }

            _level--;

            return(value);
        }