ReadAsString() public method

Reads the next JSON token from the stream as a String.
public ReadAsString ( ) : string
return string
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            string displayName = string.Empty;
            string address = string.Empty;
            while (reader.Read())
            {
                var tokenType = reader.TokenType;
                if (reader.TokenType == JsonToken.PropertyName)
                {
                    var val = (reader.Value as string )?? string.Empty;
                    if (val == "DisplayName")
                    {
                        displayName = reader.ReadAsString();
                    }
                    if (val == "Address")
                    {
                        address = reader.ReadAsString();
                    }
                }

                if (reader.TokenType == JsonToken.EndObject)
                {
                    break;
                }
            }

            var mailAddress = new MailAddress(address, displayName);
            return mailAddress;
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
                return null;

            reader.Assert(JsonToken.StartObject);

            string toString = null;
            string idObj = null;
            string typeStr = null;
            Entity entity = null;

            reader.Read();
            while (reader.TokenType == JsonToken.PropertyName)
            {
                switch ((string)reader.Value)
                {
                    case "toStr": toString = reader.ReadAsString(); break;
                    case "id": idObj = reader.ReadAsString(); break;
                    case "EntityType": typeStr = reader.ReadAsString(); break;
                    case "entity":
                        reader.Read();
                        entity = (Entity)serializer.Deserialize(reader, typeof(Entity));
                        break;
                    default: throw new InvalidOperationException("unexpected property " + (string)reader.Value);
                }

                reader.Read();
            }

            reader.Assert(JsonToken.EndObject);

            Type type = TypeLogic.GetType(typeStr);

            PrimaryKey? idOrNull = idObj == null ? (PrimaryKey?)null : PrimaryKey.Parse(idObj, type);

            if (entity == null)
                return Lite.Create(type, idOrNull.Value, toString);

            var result = entity.ToLiteFat(toString);

            if (result.EntityType != type)
                throw new InvalidOperationException("Types don't match");

            if (result.IdOrNull != idOrNull)
                throw new InvalidOperationException("Id's don't match");

            var existing = existingValue as Lite<Entity>;

            if (existing.Is(result) && existing.EntityOrNull == null && result.EntityOrNull != null)
            {
                existing.SetEntity(result.EntityOrNull);
                return existing;
            }

           return result;
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Debugger.Break();

            Source source = new Source();
            source.Format = reader.ReadAsString();
            source.Header = reader.ReadAsString();
            source.Link = reader.ReadAsString();
            return source;
        }
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer )
        {
            if( typeof( DataCharacteristic ) == objectType )
            {
                var characteristic = new DataCharacteristic();
                if( reader.Read() && reader.TokenType == JsonToken.PropertyName )
                {
                    characteristic.Uuid = new Guid( (string)reader.Value );

                    var valueAttributes = new System.Collections.Generic.List<DataService.Attribute>();
                    if( reader.Read() && reader.TokenType == JsonToken.StartObject )
                    {
                        while( reader.Read() && reader.TokenType == JsonToken.PropertyName )
                        {
                            var key = ushort.Parse( reader.Value.ToString(), System.Globalization.CultureInfo.InvariantCulture );
                            var value = reader.ReadAsString();

                            valueAttributes.Add( new DataService.Attribute( key, value ) );
                        }
                    }
                    characteristic.Value = new DataValue( valueAttributes.ToArray() );
                }
                return characteristic;
            }
            else
            {
                var characteristics = new System.Collections.Generic.List<DataCharacteristic>();
                while( reader.Read() && reader.TokenType == JsonToken.PropertyName )
                {
                    var characteristic = new DataCharacteristic();
                    characteristic.Uuid = new Guid( (string) reader.Value );

                    var valueAttributes = new System.Collections.Generic.List<DataService.Attribute>();
                    if( reader.Read() && reader.TokenType == JsonToken.StartObject )
                    {
                        while( reader.Read() && reader.TokenType == JsonToken.PropertyName )
                        {
                            var key = ushort.Parse( reader.Value.ToString(), System.Globalization.CultureInfo.InvariantCulture );
                            var value = reader.ReadAsString();

                            valueAttributes.Add( new DataService.Attribute( key, value ) );
                        }
                    }
                    characteristic.Value = new DataValue( valueAttributes.ToArray() );
                    characteristics.Add( characteristic );
                }
                return characteristics.ToArray();
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if( reader.TokenType == JsonToken.Null )
            {
                return null;
            }

            if( reader.TokenType != JsonToken.StartObject )
            {
                var msg = string.Join(" ",
                    $"The JSON representation of binary data (byte[]) when parsing the server response is not a {Converter.PseudoTypeKey}:{Converter.Binary} object.",
                    $"This happens if your JSON document contains binary data (byte[]) in some other format (like a base64 string only) rather than a native RethinkDB pseudo type {Converter.PseudoTypeKey}:{Converter.Binary} object.",
                    $"If you are overriding the default Ser/Deserialization process, you need to make sure byte[] is a native {Converter.PseudoTypeKey}:{Converter.Binary} objects before using the built-in {nameof(ReqlBinaryConverter)}.",
                    "See https://rethinkdb.com/docs/data-types/ for more information about how binary data is represented in RethinkDB.");
                throw new JsonSerializationException(msg);
            }

            reader.ReadAndAssertProperty(Converter.PseudoTypeKey);
            var reql_type = reader.ReadAsString();
            if( reql_type != Converter.Binary )
            {
                throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.Binary} but got {reql_type}.");
            }

            reader.ReadAndAssertProperty("data");

            var data = reader.ReadAsBytes();

            //realign and get out of the pseudo type
            //one more post read to align out of { reql_type:BINARY, data:""} 
            reader.ReadAndAssert();

            return data;
        }
        //EXAMPLE:
        // "r": [
        //    {
        //    "$reql_type$": "GROUPED_DATA",
        //    "data": [
        //        [
        //          "Alice",
        //          [
        //            { "id": 5,  "player": "Alice", "points": 7, "type": "free"},
        //            { "id": 12, "player": "Alice", "points": 2, "type": "free" }
        //          ]
        //        ],
        //        [
        //          "Bob",
        //          [
        //            { "id": 2,  "player": "Bob", "points": 15, "type": "ranked" },
        //            { "id": 11, "player": "Bob", "points": 10, "type": "free" }
        //          ]
        //        ]
        //       ]
        //    }
        // ]
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            reader.ReadAndAssertProperty(Converter.PseudoTypeKey);
            var reql_type = reader.ReadAsString();
            if( reql_type != Converter.GroupedData )
            {
                throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.GroupedData} but got {reql_type}.");
            }
            
            reader.ReadAndAssertProperty("data");

            //move reader to property value
            reader.ReadAndAssert();

            //... probably find a better way to do this.
            var listType = typeof(List<>).MakeGenericType(objectType);

            var list = (IList)Activator.CreateInstance(listType);

            var data = serializer.Deserialize<List<JArray>>(reader);
            foreach( var group in data )
            {
                var key = group[0]; //key, group value in common
                var items = group[1]; //the grouped items
                var grouping = Activator.CreateInstance(objectType, key, items);
                list.Add(grouping);
            }
            //.Select(arr => Activator.CreateInstance(objectType, arr) ).ToList();

            return list;
        }
        public static DubProjectConfiguration DeserializeFromPackageJson(JsonReader j)
        {
            var c = new DubProjectConfiguration { Name = "<Undefined>" };

            var srz = new JsonSerializer();
            while (j.Read() && j.TokenType != JsonToken.EndObject)
            {
                if (j.TokenType == JsonToken.PropertyName)
                {
                    switch (j.Value as string)
                    {
                        case "name":
                            c.Name = c.Id = j.ReadAsString();
                            break;
                        case "platforms":
                            j.Read();
                            c.Platform = string.Join("|",srz.Deserialize<string[]>(j));
                            break;
                        default:
                            if (!c.BuildSettings.TryDeserializeBuildSetting(j))
                                j.Skip();
                            break;
                    }
                }
            }

            return c;
        }
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			var filter = new TermsQueryDescriptor<object>();
			ITermsQuery f = filter;
			if (reader.TokenType != JsonToken.StartObject)
				return null;

			var depth = reader.Depth;
			while (reader.Read() && reader.Depth >= depth && reader.Value != null)
			{
				var property = reader.Value as string;
				switch (property)
				{
					case "boost":
						reader.Read();
						f.Boost = reader.Value as double?;
						break;
					case "_name":
						f.Name = reader.ReadAsString();
						break;
					default:
						f.Field = property;
						//reader.Read();
						ReadTerms(f, reader, serializer);
						//reader.Read();
						break;
				}
			}
			return filter;

		}
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     var str = string.Empty;
     if (reader.TokenType != JsonToken.Null && reader.TokenType == JsonToken.String)
         str = reader.ReadAsString();
     return NamingConvention.FromString(str);
 }
Beispiel #10
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        /// <param name="reader">The <see cref="Newtonsoft.Json.JsonReader"/> to read from.</param>
        /// <param name="objectType">The <see cref="System.Type"/> of the object.</param>
        /// <param name="existingValue">The existing value of object being read.</param>
        /// <param name="serializer">The calling serializer.</param>
        /// <returns>The object value.</returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            switch(reader.TokenType)
            {
                case JsonToken.Integer:
                    return new Contributors { Id = (long)reader.Value };
                case JsonToken.StartObject:
                    reader.Read();
                    var value = new Contributors();
                    while(reader.TokenType != JsonToken.EndObject)
                    {
                        if(reader.TokenType != JsonToken.PropertyName)
                            throw new FormatException("The format of this object is wrong");

                        switch((string)reader.Value)
                        {
                            case "id":
                                value.Id = (long)reader.ReadAsDecimal();
                                break;
                            case "screen_name":
                                value.ScreenName = reader.ReadAsString();
                                break;
                            default:
                                reader.Read();
                                break;
                        }
                        reader.Read();
                    }
                    return value;
            }

            throw new InvalidOperationException("This object is not a Contributors");
        }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType == JsonToken.String)
     {
         return new AssemblyName(reader.ReadAsString());
     }
     return null;
 }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
 {
     var result = new TwitterRateLimitStatusSummary();
     reader.Read();
     reader.Read();
     reader.Read();
     result.AccessToken = reader.ReadAsString(); // access_token
     return result;
 }
Beispiel #13
0
 public override object ReadJson(
     JsonReader reader,
     Type objectType,
     object existingValue,
     JsonSerializer serializer)
 {
     var webColorString = reader.ReadAsString();
     return new WebColor(webColorString);
 }
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			var s = reader.ReadAsString();
			switch(s)
			{
				case "keep": return ReindexRouting.Keep;
				case "discard": return ReindexRouting.Discard;
				default: return new ReindexRouting(s);
			}
		}
        /// <summary>
        /// Read
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="objectType"></param>
        /// <param name="existingValue"></param>
        /// <param name="hasExistingValue"></param>
        /// <param name="serializer"></param>
        /// <returns></returns>
        public override PhysicalAddress ReadJson(JsonReader reader, Type objectType,
                                                 PhysicalAddress existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            var str = reader.ReadAsString();

            if (string.IsNullOrEmpty(str))
            {
                return(PhysicalAddress.None);
            }
            return(PhysicalAddress.Parse(str));
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            //reader.Read();
            var obj = new Filter();
            obj.Name = reader.ReadAsString();
            obj.Count = reader.ReadAsInt32().GetValueOrDefault();

            reader.Read();

            return obj;
        }
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			if (reader.TokenType != JsonToken.StartArray) return null;
			var fields = new Fields();
			while (reader.TokenType != JsonToken.EndArray)
			{
				var field = reader.ReadAsString();
				if (reader.TokenType == JsonToken.String)
					fields.And(field);
			}
			return fields;
		}
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
										JsonSerializer serializer)
		{
			var o = new CatFielddataRecord() { FieldSizes = new Dictionary<string, string>() };
			while (reader.Read())
			{
				var prop = reader.Value as string;
				if (prop == null) return o;

				switch (prop)
				{
					case "id":
						o.Id = reader.ReadAsString();
						continue;
					case "node":
					case "n":
						o.Node = reader.ReadAsString();
						continue;
					case "host":
						o.Host = reader.ReadAsString();
						continue;
					case "ip":
						o.Ip = reader.ReadAsString();
						continue;
					case "total":
						o.Total = reader.ReadAsString();
						continue;
					default:
						var value = reader.ReadAsString();
						o.FieldSizes[prop] = value;
						continue;
				}
			}
			return o;
		}
 public IConfigureCloudQueueMessageEnvelope Read(JsonReader reader)
 {
     if (reader == null) throw new ArgumentNullException("reader");
     IConfigureCloudQueueMessageEnvelope envelope = new CloudQueueMessageEnvelope();
     reader.Read(); //StartObject
     reader.Read(); //PropertyName:From
     envelope = envelope.SetFrom(reader.ReadAsString()); //String:From value
     reader.Read(); //PropertyName:To
     envelope = envelope.SetTo(reader.ReadAsString()); //String:To value
     reader.Read(); //PropertyName:MessageId
     envelope = envelope.SetMessageId(new Guid(reader.ReadAsString())); //String:MessageId value
     reader.Read();
     if (((string)reader.Value) == "RelatesToMessageId") //PropertyName:Possibly RelatesToMessageId
     {
         envelope = envelope.SetRelatesToMessageId(new Guid(reader.ReadAsString()));
         reader.Read(); //PropertyName:CorrelationId
     }
     envelope = envelope.SetCorrelationId(new Guid(reader.ReadAsString())); //String:CorrelationId value
     reader.Read(); //PropertyName:ContentType
     envelope = envelope.SetContentType(reader.ReadAsString()); //String:ContentType value
     reader.Read(); //PropertyName:Content
     envelope = envelope.SetContent(reader.ReadAsBytes()); //String:Content value
     reader.Read(); //PropertyName:Time
     envelope = envelope.SetTime(reader.ReadAsDateTimeOffset().GetValueOrDefault()); //String:Time value
     reader.Read(); //EndObject
     return envelope;
 }
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
										JsonSerializer serializer)
		{
			var record = new CatFielddataRecord();
			while (reader.Read())
			{
				var prop = reader.Value as string;
				if (prop == null) return record;

				switch (prop)
				{
					case "id":
						record.Id = reader.ReadAsString();
						continue;
					case "node":
					case "n":
						record.Node = reader.ReadAsString();
						continue;
					case "host":
						record.Host = reader.ReadAsString();
						continue;
					case "ip":
						record.Ip = reader.ReadAsString();
						continue;
					case "field":
						record.Field = reader.ReadAsString();
						continue;
					case "size":
						record.Size = reader.ReadAsString();
						continue;
				}
			}
			return record;
		}
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{

			if (reader.TokenType != JsonToken.StartArray) return null;
			var types = new List<TypeName> { };
			while (reader.TokenType != JsonToken.EndArray)
			{
				var type = reader.ReadAsString();
				if (reader.TokenType == JsonToken.String)
					types.Add(type);
			}
			return new Types(types);
		}
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     var bsonReader = reader as BsonReader;
     if (bsonReader == null)
     {
         return new ObjectId(reader.ReadAsString());
     }
     else
     {
         var bytes = bsonReader.ReadAsBytes();
         return new ObjectId(bytes);
     }
 }
Beispiel #23
0
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var data = reader.ReadAsString();

        try
        {
            return(data.Split(',').Select(it => (TEnum)Enum.Parse(typeof(TEnum), it)).ToHashSet());
        }
        catch
        {
            Debug.LogError($"Incorrect data: {data}");
            return(new HashSet <TEnum>());
        }
    }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Uri uri;

            var value = reader.ReadAsString();

            if (Uri.TryCreate(value, UriKind.RelativeOrAbsolute, out uri))
            {
                return new FileToSend(uri);
            }
            else
            {
                return new FileToSend(value);
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if( reader.TokenType == JsonToken.Null )
            {
                return null;
            }

            if( reader.TokenType != JsonToken.StartObject )
            {
                var msg = string.Join(" ",
                    $"The JSON representation of a DateTime/DateTimeOffset when parsing the server response is not a {Converter.PseudoTypeKey}:{Converter.Time} object.",
                    $"This happens if your JSON document contains DateTime/DateTimeOffsets in some other format (like an ISO8601 string) rather than a native RethinkDB pseudo type {Converter.PseudoTypeKey}:{Converter.Time} object.",
                    $"If you are overriding the default Ser/Deserialization process, you need to make sure DateTime/DateTimeOffset are native {Converter.PseudoTypeKey}:{Converter.Time} objects before using the built-in {nameof(ReqlDateTimeConverter)}.",
                    "See https://rethinkdb.com/docs/data-types/ for more information about how Date and Times are represented in RethinkDB.");
                throw new JsonSerializationException(msg);
            }

            reader.ReadAndAssertProperty(Converter.PseudoTypeKey);
            var reql_type = reader.ReadAsString();
            if( reql_type != Converter.Time )
            {
                throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.Time} but got {reql_type}.");
            }

            reader.ReadAndAssertProperty("epoch_time");
            var epoch_time = reader.ReadAsDouble();
            if( epoch_time == null )
            {
                throw new JsonSerializationException($"The {Converter.PseudoTypeKey}:{Converter.Time} object doesn't have an epoch_time value.");
            }

            reader.ReadAndAssertProperty("timezone");
            var timezone = reader.ReadAsString();

            //realign and get out of the pseudo type
            //one more post read to align out of { reql_type:TIME,  .... } 
            reader.ReadAndAssert();

            if( objectType == typeof(DateTimeOffset) ||
                objectType == typeof(DateTimeOffset?) )
            {
                return ConvertDateTimeOffset(epoch_time.Value, timezone);
            }
            else
            {
                return ConvertDateTime(epoch_time.Value, timezone, serializer.DateTimeZoneHandling);
            }
        }
Beispiel #26
0
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var jObject = JObject.Parse(reader.ReadAsString());

        try
        {
            var res = new Dictionary <NoteType, T>();
            foreach (var type in (NoteType[])Enum.GetValues(typeof(NoteType)))
            {
                res[type] = serializer.Deserialize <T>(jObject.GetValue(((int)type).ToString()).CreateReader());
            }

            return(res);
        }
        catch
        {
            Debug.LogError($"Incorrect data: {jObject}");
            return(new Dictionary <NoteType, T>());
        }
    }
Beispiel #27
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var value = reader.ReadAsString();
            if (value == null)
            {
                ThrowInvalidFormatException();
            }

            var match = Regex.Match(value, @"^([a-zA-Z0-9]+)\[([a-zA-Z0-9]+)\]$");
            if (!match.Success)
            {
                ThrowInvalidFormatException();
            }

            if (existingValue == null)
            {
                existingValue = new HtmlTagAttributePair();
            }
            var pair = (HtmlTagAttributePair) existingValue;
            pair.TagName = match.Groups[1].Value;
            pair.AttributeName = match.Groups[2].Value;
            return pair;
        }
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
										JsonSerializer serializer)
		{
			var o = new CatThreadPoolRecord();
			while (reader.Read())
			{
				var prop = reader.Value as string;
				if (prop == null) return o;
				switch (prop)
				{
					case "id":
					case "nodeId":
						o.Id = reader.ReadAsString();
						continue;
					case "pid":
					case "p":
						o.Pid = reader.ReadAsString();
						continue;
					case "host":
					case "h":
						o.Host = reader.ReadAsString();
						continue;
					case "ip":
					case "i":
						o.Ip = reader.ReadAsString();
						continue;
					case "port":
					case "po":
						o.Port = reader.ReadAsString();
						continue;
					default:
						var threadPoolField = GetThreadPoolAndField(prop);
						if (threadPoolField == null) continue;
						string threadPool = threadPoolField.Item1, field = threadPoolField.Item2;

						var value = reader.ReadAsString();
						SetThreadPool(threadPool, o, field, value);
						continue;
				}
			}
			return o;
		}
        private static ApiErrorException ParseError(JsonReader jsonReader)
        {
            var error = new ApiErrorException();

            while (jsonReader.Read())
            {
                if (jsonReader.TokenType == JsonToken.PropertyName)
                {
                    switch ((string)jsonReader.Value)
                    {
                        case "message":
                            error.ErrorMessage = jsonReader.ReadAsString();
                            break;

                        case "stack":
                            error.ErrorStackTrace = jsonReader.ReadAsString();
                            break;

                        case "type":
                            error.ErrorType = jsonReader.ReadAsString();
                            break;

                        default:
                            jsonReader.Skip();
                            break;
                    }
                }
            }

            return error;
        }
        private object Deserialize(Type objectType, JsonReader reader, object obj = null)
        {
            object retval = obj == null ? Activator.CreateInstance(objectType) : obj;

            if (reader.TokenType != JsonToken.StartObject) throw new JsonReaderException(String.Format("Expected JsonToken.StartObject, got {0}", reader.TokenType.ToString()));
            reader.Read(); // Burn the StartObject token
            do
            {
                if (reader.TokenType == JsonToken.PropertyName)
                {
                    string value = (string)reader.Value;
                    var modelProperty = _modelManager.GetPropertyForJsonKey(objectType, value);

                    if (value == RelationshipsKeyName)
                    {
                        // This can only happen within a links object
                        reader.Read(); // burn the PropertyName token
                        //TODO: linked resources (Done??)
                        DeserializeLinkedResources(retval, reader);
                    }
                    else if (value == AttributesKeyName) {
                        reader.Read();

                        retval = Deserialize(objectType, reader, retval);
                    }
                    else if (modelProperty != null)
                    {
                        if (!(modelProperty is FieldModelProperty))
                        {
                            reader.Read(); // burn the PropertyName token
                            //TODO: Embedded would be dropped here!
                            continue; // These aren't supposed to be here, they're supposed to be in "related"!
                        }

                        var prop = modelProperty.Property;

                        object propVal;
                        Type enumType;
                        if (prop.PropertyType == typeof(string) &&
                            prop.GetCustomAttributes().Any(attr => attr is SerializeStringAsRawJsonAttribute))
                        {
                            reader.Read();
                            if (reader.TokenType == JsonToken.Null)
                            {
                                propVal = null;
                            }
                            else
                            {
                                var token = JToken.Load(reader);
                                var rawPropVal = token.ToString();
                                propVal = JsonHelpers.MinifyJson(rawPropVal);
                            }
                        }
                        else if (prop.PropertyType.IsGenericType &&
                                 prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) &&
                                 (enumType = prop.PropertyType.GetGenericArguments()[0]).IsEnum)
                        {
                            // Nullable enums need special handling
                            reader.Read();
                            propVal = reader.TokenType == JsonToken.Null
                                ? null
                                : Enum.Parse(enumType, reader.Value.ToString());
                        }
                        else if (prop.PropertyType == typeof(DateTimeOffset) ||
                                 prop.PropertyType == typeof(DateTimeOffset?))
                        {
                            // For some reason 
                            reader.ReadAsString();
                            propVal = reader.TokenType == JsonToken.Null
                                ? (object) null
                                : DateTimeOffset.Parse(reader.Value.ToString());
                        }
                        else
                        {
                            reader.Read();
                            propVal = DeserializeAttribute(prop.PropertyType, reader);
                        }


                        prop.SetValue(retval, propVal, null);

                        // Tell the MetadataManager that we deserialized this property
                        MetadataManager.Instance.SetMetaForProperty(retval, prop, true);

                        // pop the value off the reader, so we catch the EndObject token below!.
                        reader.Read();
                    }
                    else
                    {
                        // Unexpected/unknown property--Skip the propertyname and its value
                        reader.Skip();
                        if (reader.TokenType == JsonToken.StartArray || reader.TokenType == JsonToken.StartObject) reader.Skip();
                        else reader.Read();
                    }
                }

            } while (reader.TokenType != JsonToken.EndObject);
            reader.Read(); // burn the EndObject token before returning back up the call stack

            return retval;
        }
        private static void ReadByDataType(JsonReader reader, DataType dataType)
        {
            switch (dataType)
            {
                case DataType.String:
                    reader.ReadAsString();
                    break;

                case DataType.Int16:
                case DataType.Int32:
                    reader.ReadAsInt32();
                    break;

                case DataType.ByteArray:
                    reader.ReadAsBytes();
                    break;

                case DataType.Decimal:
                    reader.ReadAsDecimal();
                    break;

                case DataType.DateTime:
                    reader.ReadAsDateTime();
                    break;

                // These types are dealt with, but there's no explicit reader method for them
                // so we just have to trust that it does the right thing.
                case DataType.Byte:
                case DataType.Int64:
                case DataType.Boolean:
                case DataType.Float:
                case DataType.Double:
                    reader.Read();
                    break;
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if( reader.TokenType != JsonToken.StartObject )
            {
                var msg = string.Join(" ",
                    $"The JSON representation of a DateTime/DateTimeOffset when parsing the server response is not a {Converter.PseudoTypeKey}:{Converter.Time} object.",
                    $"This happens if your JSON document contains DateTime/DateTimeOffsets in some other format (like an ISO8601 string) rather than a native RethinkDB pseudo type {Converter.PseudoTypeKey}:{Converter.Time} object.",
                    $"If you are overriding the default Ser/Deserialization process, you need to make sure DateTime/DateTimeOffset are native {Converter.PseudoTypeKey}:{Converter.Time} objects before using the built-in {nameof(ReqlDateTimeConverter)}.",
                    "See https://rethinkdb.com/docs/data-types/ for more information about how Date and Times are represented in RethinkDB.");
                throw new JsonSerializationException(msg);
            }
            
            reader.ReadAndAssertProperty(Converter.PseudoTypeKey);
            var reql_type = reader.ReadAsString();
            if( reql_type != Converter.Time )
            {
                throw new JsonSerializationException($"Expected {Converter.PseudoTypeKey} should be {Converter.Time} but got {reql_type}.");
            }

            reader.ReadAndAssertProperty("epoch_time");
            var epoch_time = reader.ReadAsDecimal();
            if( epoch_time == null )
            {
                throw new JsonSerializationException($"The {Converter.PseudoTypeKey}:{Converter.Time} object doesn't have an epoch_time value.");
            }

            reader.ReadAndAssertProperty("timezone");
            var timezone = reader.ReadAsString();

            //realign and get out of the pseudo type
            //one more post read to align out of { reql_type:TIME,  .... } 
            reader.ReadAndAssert();

            var tz = TimeSpan.Parse(timezone.Substring(1));
            if( !timezone.StartsWith("+") )
                tz = -tz;

            var epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
            var dt = epoch + TimeSpan.FromSeconds(Convert.ToDouble(epoch_time.Value));

            var dto = dt.ToOffset(tz);

            if( objectType == typeof(DateTimeOffset) )
                return dto;

            var tzHandle = serializer.DateTimeZoneHandling;

            switch( tzHandle )
            {
                case DateTimeZoneHandling.Local:
                    return dto.LocalDateTime;
                case DateTimeZoneHandling.Utc:
                    return dto.UtcDateTime;
                case DateTimeZoneHandling.Unspecified:
                    return dto.DateTime;
                case DateTimeZoneHandling.RoundtripKind:
                    return dto.Offset == TimeSpan.Zero ? dto.UtcDateTime : dto.LocalDateTime;
                default:
                    throw new JsonSerializationException("Invalid date time handling value.");
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var list = new List<IPocketArticle>();
              var pocketArticle = new PocketArticle();
              while (reader.Read())
              {
            if (reader.Value != null)
            {
              string[] strArray = reader.Path.Split('.');

              switch (strArray[strArray.Count() - 1])
              {
            case "item_id":
              pocketArticle.ItemId = reader.ReadAsString();
              break;
            case "resolved_id":
              pocketArticle.ResolvedId = reader.ReadAsString();
              break;
            case "given_url":
              pocketArticle.GivenUrl = reader.ReadAsString();
              break;
            case "given_title":
              pocketArticle.GivenTitle = reader.ReadAsString();
              break;
            case "favorite":
              pocketArticle.Favorite = reader.ReadAsString();
              break;
            case "status":
              pocketArticle.Status = reader.ReadAsString();
              break;
            case "time_added":
              pocketArticle.TimeAdded = reader.ReadAsString();
              break;
            case "time_updated":
              pocketArticle.TimeUpdated = reader.ReadAsString();
              break;
            case "time_read":
              pocketArticle.TimeRead = reader.ReadAsString();
              break;
            case "time_favorited":
              pocketArticle.TimeFavorited = reader.ReadAsString();
              break;
            case "sort_id":
              pocketArticle.SortId = reader.ReadAsInt32().GetValueOrDefault();
              break;
            case "resolved_title":
              pocketArticle.ResolvedTitle = reader.ReadAsString();
              break;
            case "resolved_url":
              pocketArticle.ResolvedUrl = reader.ReadAsString();
              break;
            case "excerpt":
              pocketArticle.Excerpt = reader.ReadAsString();
              break;
            case "is_article":
              pocketArticle.IsArticle = reader.ReadAsString();
              break;
            case "is_index":
              pocketArticle.IsIndex = reader.ReadAsString();
              break;
            case "has_video":
              pocketArticle.HasVideo = reader.ReadAsString();
              break;
            case "has_image":
              pocketArticle.HasImage = reader.ReadAsString();
              break;
            case "word_count":
              pocketArticle.WordCount = reader.ReadAsString();
              break;
              }
            }
            else
            {
              if (!string.IsNullOrEmpty(pocketArticle.ItemId))
            list.Add(pocketArticle);
              pocketArticle = new PocketArticle();
            }
              }
              return list;
        }
Beispiel #34
0
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var data = reader.ReadAsString();

        return(data.ToColor());
    }