Read() public abstract method

Reads the next JSON token from the stream.
public abstract Read ( ) : bool
return bool
 private static string ReadType(JsonReader reader)
 {
     reader.Read();
     string type = (string)reader.Value;
     reader.Read();
     return type;
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType != JsonToken.StartObject)
                throw new JsonException("Expected {");

            var results = new List<InputAlias>();

            reader.Read();
            while (reader.TokenType != JsonToken.EndObject)
            {
                if (reader.TokenType != JsonToken.PropertyName)
                    throw new JsonException("Expected property name");

                var alias = (string)reader.Value;
                reader.Read();

                if (reader.TokenType != JsonToken.String)
                    throw new JsonException("Expected string");

                var value = (string)reader.Value;

                results.Add(new InputAlias
                {
                    Name = alias,
                    Value = value
                });

                reader.Read();
            }

            return results.ToArray();
        }
 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;
 }
        /// <summary>
        /// Invoked when caller's data has to be deserialized.
        /// </summary>
        /// <returns>The DateTimeOffset converted to UTC time.
        /// In this case the offset value is allways 0.</returns>
        public override object ReadJson(Newtonsoft.Json.JsonReader reader,
                                        Type objectType, object existingValue,
                                        Newtonsoft.Json.JsonSerializer serializer)
        {
            if (objectType == typeof(DateTime))
            {
                //SEE HERE WHY.
                throw new NotSupportedException("DateTime not allowed");
            }
            else if (objectType == typeof(DateTimeOffset))
            {
                reader.Read(); // move to datetime element
                reader.Read(); //move to datetime value
                DateTime dt = (DateTime)reader.Value;

                reader.Read(); // move to offset element
                reader.Read(); //move to offset value
                Int64 offsetinMin = (Int64)reader.Value;

                DateTime utcTime = new DateTime(dt.AddMinutes(-offsetinMin).Ticks,
                                                DateTimeKind.Utc);

                reader.Read();//ensures that reader is left in valid state.

                return(new DateTimeOffset(utcTime, TimeSpan.FromMinutes(0)));
            }
            else
            {
                return(null);
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
        {
            EthSolidityContract contract = new EthSolidityContract();
            int startingDepth = reader.Depth;

            while (!(reader.TokenType == JsonToken.EndObject && reader.Depth == startingDepth))
            {
                reader.Read();
                if (reader.TokenType == JsonToken.PropertyName)
                {
                    string propertyName = reader.Value.ToString();

                    if (String.Equals(propertyName, "code"))
                    {
                        reader.Read();
                        contract.Code = serializer.Deserialize<byte[]>(reader);
                    }
                    else if (String.Equals(propertyName, "info"))
                    {
                        reader.Read();
                        contract.Info = serializer.Deserialize<ContractInfo>(reader);
                    }
                    else
                    {
                        contract.ContractName = reader.Value.ToString();
                        reader.Read();
                    }
                }
            }

            return contract;
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var itemType = objectType.GenericTypeArguments.Single();
            if (reader.TokenType == JsonToken.StartObject)
            {
                object itemsArray = null;
                LimitsReturned limitsReturned = null;
                while (reader.Read())
                {
                    if (reader.TokenType == JsonToken.StartArray)
                    {
                        //Items Array
                        itemsArray = serializer.Deserialize(reader, itemType.MakeArrayType());
                    }
                    else if (reader.TokenType == JsonToken.PropertyName && ((string)reader.Value).Equals("limits", StringComparison.OrdinalIgnoreCase))
                    {
                        reader.Read();
                        limitsReturned = serializer.Deserialize<LimitsReturned>(reader);
                    }
                }
                if (limitsReturned == null)
                {
                    throw new InvalidOperationException("Limits nicht gefunden!");
                }

                return Activator.CreateInstance(objectType, itemsArray, limitsReturned);
            }
            throw new InvalidOperationException("Der JsonReader muss auf einem Objekt stehen!");
        }
        private object ProcessToken(JsonReader reader)
        {
            // Recursively processes a token. This is required for elements that next other elements.
            object processedObject = null;
            if (reader.TokenType == JsonToken.StartObject)
            {
                Dictionary<string, object> dictionaryValue = new Dictionary<string, object>();
                while (reader.Read() && reader.TokenType != JsonToken.EndObject)
                {
                    string elementKey = reader.Value.ToString();
                    reader.Read();
                    dictionaryValue.Add(elementKey, ProcessToken(reader));
                }

                processedObject = dictionaryValue;
            }
            else if (reader.TokenType == JsonToken.StartArray)
            {
                List<object> arrayValue = new List<object>();
                while (reader.Read() && reader.TokenType != JsonToken.EndArray)
                {
                    arrayValue.Add(ProcessToken(reader));
                }

                processedObject = arrayValue.ToArray();
            }
            else
            {
                processedObject = reader.Value;
            }

            return processedObject;
        }
 private static object InternalReadJson(JsonReader reader, JsonSerializer serializer)
 {
     if (reader.TokenType != JsonToken.StartObject)
         throw new ArgumentException("Expected token '{' not found.");
     reader.Read();
     AttributesTable attributesTable = new AttributesTable();
     while (reader.TokenType == JsonToken.PropertyName)
     {
         string attributeName = (string) reader.Value;
         reader.Read();
         object attributeValue;
         if (reader.TokenType == JsonToken.StartObject)
         {
             // inner object
             attributeValue = InternalReadJson(reader, serializer);
         }
         else
         {
             attributeValue = reader.Value;
         }
         reader.Read();
         attributesTable.AddAttribute(attributeName, attributeValue);
     }            
     return attributesTable;
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            int result = 0;

            // What's happening in this code? We express [Flags] enums in JSON as arrays of
            // strings. On deserialization, we walk the array, locate each string,
            // and convert it to its equivalent enum value. Because we don't have a strong
            // sense of the destination type, we simply treat the enum values as numbers
            // and OR them together. This number will eventually be unboxed and assigned
            // to the target enum property.

            // Read start of array
            reader.Read();

            while (reader.TokenType == JsonToken.String)
            {
                string enumName = EnumConverter.ConvertToPascalCase((string)reader.Value);
                result |= (int)Enum.Parse(objectType, enumName);
                reader.Read();
            }

            return result;
        }
 private static long ReadId(JsonReader reader)
 {
     reader.Read();
     long type = (long)reader.Value;
     reader.Read();
     return type;
 }
Beispiel #11
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)
        {
            List<Sex> result = new List<Sex> ();

            // now tokentype is [

            reader.Read ();

            while (reader.TokenType == JsonToken.String)
            {
                string enumString = (string)reader.Value;

                switch (enumString)
                {
                case "man":
                    result.Add (Sex.Male);
                    break;
                case "woman":
                    result.Add (Sex.Female);
                    break;
                default:
                    throw new Exception ("Wrong sex");
                }

                reader.Read ();
            }

            return result;
        }
Beispiel #13
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var path = reader.Path;
            const string jsonpath = "summary.total_count";
            var parts = jsonpath.Split('.');
            var i = 0;
            object result = 0L;
            while (true)
            {
                if (reader.TokenType == JsonToken.EndObject && reader.Path == path) break;
                if (reader.TokenType == JsonToken.PropertyName &&
                    reader.ValueType == typeof (string) &&
                    (string) reader.Value == parts[i])
                {
                    i++;
                    if (i == parts.Length)
                    {
                        reader.Read();
                        if (reader.TokenType != JsonToken.Integer) Debugger.Break();
                        result = reader.Value;
                    }
                }
                reader.Read();
            }

            return result;
        }
Beispiel #14
0
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			var typeName = string.Empty;
			do
			{
				reader.Read();

				// SELF this depends on the alphabetical order of the property names and should be changed
				if (reader.TokenType == JsonToken.PropertyName
				    && string.Compare(reader.Value as string, "MessageTypeName", true) == 0)
				{
					reader.Read();
					typeName = reader.Value.ToString();
				}

				if (reader.TokenType == JsonToken.PropertyName && string.Compare(reader.Value as string, "Payload", true) == 0)
				{
					reader.Read();

					var type = Type.GetType(typeName);

					var msg = serializer.Deserialize(reader, type);

					return new Envelope(msg as IMessage);
				}
			}
			while (reader.TokenType != JsonToken.EndObject);

			reader.Read();

			return null;
		}
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        public sealed override object ReadJson(
            JsonReader reader,
            Type objectType,
            [AllowNull] object existingValue,
            JsonSerializer serializer)
        {
            if (reader.TokenType != JsonToken.StartObject)
            {
                return DeserializeLiteral(reader, objectType, serializer);
            }

            object value = null;
            while (reader.TokenType != JsonToken.EndObject)
            {
                reader.Read();

                if (reader.TokenType == JsonToken.PropertyName && Equals(reader.Value, "@value"))
                {
                    reader.Read();
                    value = DeserializeLiteral(reader, objectType, serializer);
                }
                else
                {
                    reader.Skip();
                }
            }

            return value;
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var collection = new NameValueCollection();

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

                var key = (string)reader.Value;

                if (reader.Read() == false)
                    throw new InvalidOperationException("Expected PropertyName, got " + reader.TokenType);

                if (reader.TokenType == JsonToken.StartArray)
                {
                    var values = serializer.Deserialize<string[]>(reader);
                    foreach (var value in values)
                    {
                        collection.Add(key, value);
                    }
                }
                else
                {
                    collection.Add(key, reader.Value.ToString());
                }
            }

            return collection;
        }
        public override bool MoveNext()
        {
            if (IsDisposed) throw new ObjectDisposedException(null);

            if (_reader == null)
            {
                var wc = new WebClient();
                //var json = wc.DownloadString("http://data.baltimorecity.gov/api/views/ijfz-2v3c/rows.json");
                //var json = wc.DownloadString("file:///C:/Users/PTying/Documents/GitHub/civilsalary/civilsalary.datasync/usa/md/baltimorecity/rows.json");

                var uri = new Uri((new FileInfo("..\\..\\..\\civilsalary.datasync\\usa\\md\\baltimorecity\\rows.json")).FullName);
                var json = wc.DownloadString(uri);

                _reader = new JsonTextReader(new StringReader(json));
                _reader.ReadToProperty("meta", 1);
                _reader.ReadToProperty("view", 3);
                _reader.Read(); //start view object...

                _view = JObject.Load(_reader).AsDynamic();

                _reader.ReadToProperty("data", 1);
                _reader.Read(); //step in to data

            }

            if (_reader.Read() && _reader.Depth == DataDepth)
            {
                var currentValues = JArray.Load(_reader);

                _current = new EmployeeData()
                {
                    DepartmentName = ((string)currentValues[ColumnIndex("agency")]).Trim(),
                    DepartmentKey = ((string)currentValues[ColumnIndex("agency")]).Trim().ToUrlValue(),
                    Row = new EmployeeRow()
                    {
                        GovernmentKey = _government,
                        Name = ((string)currentValues[ColumnIndex("name")]).Trim().Trim(','),
                        EmployeeId = ((string)currentValues[ColumnIndex("id")]).Trim(),
                        Position = ((string)currentValues[ColumnIndex("jobtitle")]).Trim(),
                        Salary = double.Parse((string)currentValues[ColumnIndex("annualsalary")], NumberStyles.AllowCurrencySymbol
                            | NumberStyles.AllowDecimalPoint
                            | NumberStyles.AllowLeadingSign
                            | NumberStyles.AllowParentheses
                            | NumberStyles.AllowThousands),
                        GrossPay = double.Parse((string)currentValues[ColumnIndex("grosspay")], NumberStyles.AllowCurrencySymbol
                            | NumberStyles.AllowDecimalPoint
                            | NumberStyles.AllowLeadingSign
                            | NumberStyles.AllowParentheses
                            | NumberStyles.AllowThousands),
                        HireDate = (string)currentValues[ColumnIndex("hiredate")] == null ? (DateTime?)null : DateTime.Parse((string)currentValues[ColumnIndex("hiredate")])
                    }
                };

                return true;
            }
            else
            {
                return false;
            }
        }
        private TypeReference ReadObject(JsonReader reader)
        {
            reader.Read();
            if (reader.TokenType != JsonToken.PropertyName || ((string)reader.Value != "__ref__" && (string)reader.Value != "type"))
            {
                throw new ArgumentException("Unexpected token type " + reader.TokenType);
            }

            var isRef = (string) reader.Value == "__ref__";

            reader.Read();
            if (reader.TokenType != JsonToken.String)
            {
                throw new ArgumentException("Unexpected token type " + reader.TokenType);
            }

            var retval = new TypeReference
            {
                IsReference = isRef,
                Name = (string)reader.Value
            };
            reader.Read();

            return retval;
        }
        /// <summary>
        /// Reads the JSON.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value.</param>
        /// <param name="serializer">The serializer.</param>
        /// <returns></returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return null;
            }

            if (reader.TokenType != JsonToken.StartArray)
            {
                return null;
            }
            reader.Read();
            var coords = new double[2];
            if (reader.TokenType == JsonToken.Float || reader.TokenType == JsonToken.Integer)
            {
                coords[0] = (double)reader.Value;
                reader.Read();
            }
            if (reader.TokenType == JsonToken.Float || reader.TokenType == JsonToken.Integer)
            {
                coords[1] = (double)reader.Value;
                reader.Read();
            }

            var latitude = coords[0];
            var longitude = coords[1];

            return new TwitterGeoLocation.GeoCoordinates { Latitude = latitude, Longitude = longitude };
        }
		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;

		}
Beispiel #21
0
        /// <summary>
        /// 解析json字段的值;
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="serializer"></param>
        /// <returns></returns>
        private object CreateJsonValue(Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.JsonSerializer serializer)
        {
            while (reader.TokenType == Newtonsoft.Json.JsonToken.Comment)
            {
                if (!reader.Read())
                {
                    throw new JsonSerializationException("Unexpected end.");
                }
            }

            switch (reader.TokenType)
            {
            case JsonToken.StartObject:
            {
                return(CreateJsonObject(reader, serializer));
            }

            case JsonToken.StartArray:
            {
                var list = new List <object>();

                while (reader.Read())
                {
                    switch (reader.TokenType)
                    {
                    case JsonToken.EndArray:
                        return(list);

                    default:
                        var value = CreateJsonValue(reader, serializer);
                        list.Add(value);
                        break;
                    }
                }
            }
            break;

            case JsonToken.Integer:
                return(System.Convert.ToInt64(reader.Value, CultureInfo.InvariantCulture));

            case JsonToken.Float:
                return(System.Convert.ToDouble(reader.Value, CultureInfo.InvariantCulture));

            case JsonToken.Boolean:
                return(System.Convert.ToBoolean(reader.Value, CultureInfo.InvariantCulture));

            case JsonToken.String:
            case JsonToken.Bytes:
            case JsonToken.Date:
                return(reader.Value.ToString());

            case JsonToken.Null:
                return(null);

            default:
                throw new JsonSerializationException("Unexpected or unsupported token: {0}" + reader.TokenType);
            }

            throw new JsonSerializationException("Unexpected end.");
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
        {
            FunctionInputOutput functionInputOutput = new FunctionInputOutput();
            int startingDepth = reader.Depth;

            while (!(reader.TokenType == JsonToken.EndObject && reader.Depth == startingDepth))
            {
                reader.Read();
                if (reader.TokenType == JsonToken.PropertyName)
                {
                    string propertyName = reader.Value.ToString();

                    if (String.Equals(propertyName, "name"))
                    {
                        reader.Read();
                        functionInputOutput.Name = reader.Value.ToString();
                    }
                    else if (String.Equals(propertyName, "type"))
                    {
                        reader.Read();
                        functionInputOutput.Type = reader.Value.ToString();
                    }
                }
            }

            return functionInputOutput;
        }
        private TypeReference[] ReadArray(JsonReader reader)
        {
            var singleItem = ReadItem(reader);
            if (singleItem != null)
            {
                return new[] { singleItem };
            }

            if (reader.TokenType != JsonToken.StartArray)
            {
                throw new ArgumentException("Unexpected token type " + reader.TokenType);
            }

            var tokens = new List<TypeReference>();
            reader.Read();
            while (reader.TokenType != JsonToken.EndArray)
            {
                singleItem = ReadItem(reader);
                if (singleItem != null)
                {
                    tokens.Add(singleItem);
                    reader.Read();
                    continue;
                }

                throw new ArgumentException("Unexpected token type " + reader.TokenType);
            }

            return tokens.ToArray();
        }
        /// <inheritdoc/>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            bool isRoot = reader.Depth == 0;

            if (isRoot)
            {
                // Skip to the desired property
                while (reader.Read())
                {
                    if (reader.TokenType != JsonToken.PropertyName || reader.Value.ToString() != _name)
                        continue;

                    // Advance to the contained value
                    reader.Read();
                    break;
                }
            }

            // Default Deserialization
            object result = base.ReadJson(reader, objectType, existingValue, serializer);

            if (isRoot)
            {
                while (reader.Read()) { } // Advance to end
            }

            return result;
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                return null;
            }

            if (reader.TokenType != JsonToken.StartArray)
            {
                return null;
            }
            reader.Read();
            var coords = new double[2];
            for (int i = 0; i < 2; ++i)
            {
                if (reader.TokenType == JsonToken.Float)
                {
                    coords[i] = (double)reader.Value;
                    reader.Read();
                }
                else if (reader.TokenType == JsonToken.Integer)
                {
                    coords[i] = (double)((long)reader.Value);
                    reader.Read();
                }
            }

            var latitude = coords[0];
            var longitude = coords[1];

            return new TwitterGeoLocation.GeoCoordinates { Latitude = latitude, Longitude = longitude };
        }
        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;
        }
        private object ReadObject(JsonReader reader)
        {
            var obj = new Dictionary<string, object>();

            while (reader.Read())
            {
                switch (reader.TokenType)
                {
                    case JsonToken.PropertyName:
                        var propertyName = reader.Value.ToString();

                        if (!reader.Read())
                        {
                            throw new JsonSerializationException("Unexpected end when reading IDictionary<string, object>");
                        }

                        var value = ReadValue(reader);
                        obj[propertyName] = value;
                        break;
                    case JsonToken.Comment:
                        break;
                    case JsonToken.EndObject:
                        return obj;
                }
            }

            throw new JsonSerializationException("Unexpected end when reading IDictionary<string, object>");
        }
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        /// <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
        /// <param name="objectType">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)
        {
            var result = new Collection<Claim>();

            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.EndArray)
                    break;

                if (reader.TokenType != JsonToken.StartObject)
                    continue;

                var jo = JObject.Load(reader);
                var claim = new Claim(
                    (string)jo["ClaimType"],
                    (string)jo["Value"],
                    (string)jo["ValueType"],
                    (string)jo["Issuer"],
                    (string)jo["OriginalIssuer"]
                    );
                var jt = jo["Properties"];
                var props = serializer.Deserialize<Dictionary<string, string>>(jt.CreateReader());

                foreach (var entry in props)
                    claim.Properties.Add(entry.Key, entry.Value);

                result.Add(claim);
            }

            // Reading EndObject;
            reader.Read();

            return result;
        }
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
   if (ReflectionUtils.IsNullableType(objectType))
     Nullable.GetUnderlyingType(objectType);
   if (reader.TokenType == JsonToken.Null)
   {
     if (!ReflectionUtils.IsNullable(objectType))
       throw JsonSerializationException.Create(reader, StringUtils.FormatWith("Cannot convert null value to {0}.", (IFormatProvider) CultureInfo.InvariantCulture, (object) objectType));
     else
       return (object) null;
   }
   else
   {
     if (reader.TokenType != JsonToken.StartConstructor || !string.Equals(reader.Value.ToString(), "Date", StringComparison.Ordinal))
       throw JsonSerializationException.Create(reader, StringUtils.FormatWith("Unexpected token or value when parsing date. Token: {0}, Value: {1}", (IFormatProvider) CultureInfo.InvariantCulture, (object) reader.TokenType, reader.Value));
     reader.Read();
     if (reader.TokenType != JsonToken.Integer)
       throw JsonSerializationException.Create(reader, StringUtils.FormatWith("Unexpected token parsing date. Expected Integer, got {0}.", (IFormatProvider) CultureInfo.InvariantCulture, (object) reader.TokenType));
     DateTime dateTime = JsonConvert.ConvertJavaScriptTicksToDateTime((long) reader.Value);
     reader.Read();
     if (reader.TokenType != JsonToken.EndConstructor)
       throw JsonSerializationException.Create(reader, StringUtils.FormatWith("Unexpected token parsing date. Expected EndConstructor, got {0}.", (IFormatProvider) CultureInfo.InvariantCulture, (object) reader.TokenType));
     else
       return (object) dateTime;
   }
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var singleItem = ReadItem(reader);
            if (singleItem != null)
            {
                return new[] { singleItem };
            }

            if (reader.TokenType != JsonToken.StartArray)
            {
                throw new ArgumentException("Unexpected token type " + reader.TokenType);
            }

            var tokens = new List<TypeReference>();
            reader.Read();
            while (reader.TokenType != JsonToken.EndArray)
            {
                singleItem = ReadItem(reader);
                if (singleItem != null)
                {
                    tokens.Add(singleItem);
                    reader.Read();
                    continue;
                }

                throw new ArgumentException("Unexpected token type " + reader.TokenType);  
            }

            return tokens.ToArray();
        }
Beispiel #31
0
        //get the current account balance for a given user
        public string getAccountBalance(string username, string apiKey, ref NotifyIcon notifyIcon)
        {
            string accountBalance = "0.0";

            try
            {
                if (String.IsNullOrEmpty(username))
                    return "";

                WebClient client = new WebClient();
                string urlFormat = "http://marketplace.envato.com/api/v1/" + username + "/" + apiKey + "/account.json";
                Uri url = new Uri(string.Format(urlFormat));
                string data = client.DownloadString(url);

                using (JsonReader reader = new JsonReader(new StringReader(data)))
                {
                    while (reader.Read())
                    {
                        //users++;
                        if ((string)reader.Value == "balance")
                        {
                            reader.Read();
                            accountBalance = (string)reader.Value;
                        }
                    }
                    reader.Close(); //close the reader object
                }
            }
            catch (WebException webex)
            {
                notifyIcon.ShowBalloonTip(180000000, "EnvatoTracker error!", "Error querying the api - invalid api key maybe?\n\nError:"+webex, ToolTipIcon.None);
            }

            return accountBalance;
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.String)
            {
                var ret = LogLevel.FromString((string)reader.Value);
                return ret;
            }
            else if (reader.TokenType == JsonToken.StartObject)
            {
                reader.Read();
                if (reader.TokenType == JsonToken.PropertyName && String.Equals((string)reader.Value, "name", StringComparison.OrdinalIgnoreCase))
                {
                    reader.Read();
                    if (reader.TokenType == JsonToken.String)
                    {
                        string val = (string)reader.Value;
                        reader.Read();
                        Debug.Assert(reader.TokenType == JsonToken.EndObject);
                        return LogLevel.FromString(val);
                    }
                }
            }
            return null;

        }
Beispiel #33
0
        /// <summary>
        /// 递归创建对象;
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="serializer"></param>
        /// <returns></returns>
        private object CreateJsonObject(Newtonsoft.Json.JsonReader reader, JsonSerializer serializer)
        {
            var    dict         = new Dictionary <string, object>();
            string propertyName = null;

            while (reader.Read())
            {
                switch (reader.TokenType)
                {
                case JsonToken.PropertyName:
                    propertyName = (string)reader.Value;
                    break;

                case JsonToken.EndObject:
                    return(dict);

                case JsonToken.Comment:
                    break;

                default:
                    var propertyValue = CreateJsonValue(reader, serializer);
                    dict[propertyName] = propertyValue;
                    break;
                }
            }

            throw new JsonSerializationException("Unexpected end.");
        }
        // Returns an iterable that yields JSON objects from the structure given in the regex. In this case [ { obj1 }, { obj2 } ]
        public static IEnumerable <T> SelectTokensWithRegex <T>(
            this Newtonsoft.Json.JsonReader jsonReader, Regex regex)
        {
            JsonSerializer serializer = new JsonSerializer();

            while (jsonReader.Read())
            {
                if (regex.IsMatch(jsonReader.Path) &&
                    jsonReader.TokenType != JsonToken.PropertyName)
                {
                    yield return(serializer.Deserialize <T>(jsonReader));
                }
            }
        }
Beispiel #35
0
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.None)
            {
                reader.Read();
            }

            var value = CreateJsonValue(reader, serializer);

            if (value == null)
            {
                return(null);
            }
            if (!objectType.IsInstanceOfType(value))
            {
                throw new JsonSerializationException(string.Format("Could not convert '{0}' to '{1}'.", value.GetType(), objectType));
            }

            return(value);
        }
Beispiel #36
0
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (objectType != typeof(XmlDocument))
            {
                throw new JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocuments");
            }

            XmlDocument         document = new XmlDocument();
            XmlNamespaceManager manager  = new XmlNamespaceManager(document.NameTable);

            if (reader.TokenType != JsonToken.StartObject)
            {
                throw new JsonSerializationException("XmlNodeConverter can only convert JSON that begins with an object.");
            }

            reader.Read();

            DeserializeNode(reader, document, manager, document);

            return(document);
        }
Beispiel #37
0
        private void DeserializeNode(Newtonsoft.Json.JsonReader reader, XmlDocument document, XmlNamespaceManager manager, XmlNode currentNode)
        {
            if (currentNode.NodeType == XmlNodeType.Document)
            {
                XmlElement root = document.CreateElement("records");
                document.AppendChild(root);
                currentNode = root;
            }

            XmlNode savedNode = currentNode;

            do
            {
                if (savedNode.Name == "records" && savedNode.ParentNode.NodeType == XmlNodeType.Document)
                {
                    currentNode = savedNode;
                }

                switch (reader.TokenType)
                {
                case JsonToken.PropertyName:
                    if (currentNode.NodeType == XmlNodeType.Document && document.DocumentElement != null)
                    {
                        throw new JsonSerializationException("JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document.");
                    }

                    string propertyName = reader.Value.ToString();
                    reader.Read();

                    if (reader.TokenType == JsonToken.StartArray)
                    {
                        while (reader.Read() && reader.TokenType != JsonToken.EndArray)
                        {
                            if (reader.TokenType == JsonToken.StartObject)
                            {
                                if (currentNode.Name == "records" && currentNode.ParentNode.NodeType == XmlNodeType.Document &&
                                    (propertyName == "Updated" || propertyName == "Created" || propertyName == "Deleted"))
                                {
                                    XmlNode tempNode = currentNode.SelectSingleNode(propertyName);
                                    if (tempNode != null)
                                    {
                                        currentNode  = tempNode;
                                        propertyName = "record";
                                    }
                                }
                            }
                            DeserializeValue(reader, document, manager, propertyName, currentNode);
                        }
                    }
                    else
                    {
                        bool addRecord = currentNode.ParentNode != null && currentNode.ParentNode.ParentNode != null &&
                                         currentNode.ParentNode.Name == "records" && currentNode.ParentNode.ParentNode.NodeType == XmlNodeType.Document;

                        if ((currentNode.Name == "Updated" || currentNode.Name == "Created" || currentNode.Name == "Deleted") && addRecord)
                        {
                            XmlElement record = document.CreateElement("record");
                            currentNode.AppendChild(record);
                            currentNode = record;
                        }
                        DeserializeValue(reader, document, manager, propertyName, currentNode);
                    }
                    break;

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

                    while (reader.Read() && reader.TokenType != JsonToken.EndConstructor)
                    {
                        DeserializeValue(reader, document, manager, "-" + constructorName, currentNode);
                    }
                    break;

                case JsonToken.EndObject:
                case JsonToken.EndArray:
                    return;

                default:
                    throw new JsonSerializationException("Unexpected JsonToken when deserializing node: " + reader.TokenType);
                }
            } while (reader.TokenType == JsonToken.PropertyName || reader.Read());
            // don't read if current token is a property. token was already read when parsing element attributes
        }
Beispiel #38
0
        internal void WriteToken(JsonReader reader, int initialDepth)
        {
            while (true)
            {
                switch (reader.TokenType)
                {
                case JsonToken.None:
                    goto IL_1DB;

                case JsonToken.StartObject:
                    this.WriteStartObject();
                    goto IL_1DB;

                case JsonToken.StartArray:
                    this.WriteStartArray();
                    goto IL_1DB;

                case JsonToken.StartConstructor:
                {
                    string text = reader.Value.ToString();
                    if (string.Compare(text, "Date", 4) == 0)
                    {
                        this.WriteConstructorDate(reader);
                    }
                    else
                    {
                        this.WriteStartConstructor(reader.Value.ToString());
                    }
                    goto IL_1DB;
                }

                case JsonToken.PropertyName:
                    this.WritePropertyName(reader.Value.ToString());
                    goto IL_1DB;

                case JsonToken.Comment:
                    this.WriteComment(reader.Value.ToString());
                    goto IL_1DB;

                case JsonToken.Raw:
                    this.WriteRawValue((string)reader.Value);
                    goto IL_1DB;

                case JsonToken.Integer:
                    this.WriteValue(Convert.ToInt64(reader.Value, CultureInfo.get_InvariantCulture()));
                    goto IL_1DB;

                case JsonToken.Float:
                    this.WriteValue(Convert.ToDouble(reader.Value, CultureInfo.get_InvariantCulture()));
                    goto IL_1DB;

                case JsonToken.String:
                    this.WriteValue(reader.Value.ToString());
                    goto IL_1DB;

                case JsonToken.Boolean:
                    this.WriteValue(Convert.ToBoolean(reader.Value, CultureInfo.get_InvariantCulture()));
                    goto IL_1DB;

                case JsonToken.Null:
                    this.WriteNull();
                    goto IL_1DB;

                case JsonToken.Undefined:
                    this.WriteUndefined();
                    goto IL_1DB;

                case JsonToken.EndObject:
                    this.WriteEndObject();
                    goto IL_1DB;

                case JsonToken.EndArray:
                    this.WriteEndArray();
                    goto IL_1DB;

                case JsonToken.EndConstructor:
                    this.WriteEndConstructor();
                    goto IL_1DB;

                case JsonToken.Date:
                    this.WriteValue((DateTime)reader.Value);
                    goto IL_1DB;

                case JsonToken.Bytes:
                    this.WriteValue((byte[])reader.Value);
                    goto IL_1DB;
                }
                break;
IL_1DB:
                if (initialDepth - 1 >= reader.Depth - ((!this.IsEndToken(reader.TokenType)) ? 0 : 1) || !reader.Read())
                {
                    return;
                }
            }
            throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", reader.TokenType, "Unexpected token type.");
        }
Beispiel #39
0
        internal void WriteToken(JsonReader reader, int initialDepth)
        {
            do
            {
                switch (reader.TokenType)
                {
                case JsonToken.StartObject:
                    WriteStartObject();
                    break;

                case JsonToken.StartArray:
                    WriteStartArray();
                    break;

                case JsonToken.StartConstructor:
                {
                    string strA = reader.Value.ToString();
                    if (string.Compare(strA, "Date", StringComparison.Ordinal) == 0)
                    {
                        WriteConstructorDate(reader);
                    }
                    else
                    {
                        WriteStartConstructor(reader.Value.ToString());
                    }
                    break;
                }

                case JsonToken.PropertyName:
                    WritePropertyName(reader.Value.ToString());
                    break;

                case JsonToken.Comment:
                    WriteComment(reader.Value.ToString());
                    break;

                case JsonToken.Integer:
                    WriteValue(Convert.ToInt64(reader.Value, CultureInfo.InvariantCulture));
                    break;

                case JsonToken.Float:
                    WriteValue(Convert.ToDouble(reader.Value, CultureInfo.InvariantCulture));
                    break;

                case JsonToken.String:
                    WriteValue(reader.Value.ToString());
                    break;

                case JsonToken.Boolean:
                    WriteValue(Convert.ToBoolean(reader.Value, CultureInfo.InvariantCulture));
                    break;

                case JsonToken.Null:
                    WriteNull();
                    break;

                case JsonToken.Undefined:
                    WriteUndefined();
                    break;

                case JsonToken.EndObject:
                    WriteEndObject();
                    break;

                case JsonToken.EndArray:
                    WriteEndArray();
                    break;

                case JsonToken.EndConstructor:
                    WriteEndConstructor();
                    break;

                case JsonToken.Date:
                    WriteValue((DateTime)reader.Value);
                    break;

                case JsonToken.Raw:
                    WriteRawValue((string)reader.Value);
                    break;

                case JsonToken.Bytes:
                    WriteValue((byte[])reader.Value);
                    break;

                default:
                    throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", reader.TokenType, "Unexpected token type.");

                case JsonToken.None:
                    break;
                }
            }while (initialDepth - 1 < reader.Depth - (IsEndToken(reader.TokenType) ? 1 : 0) && reader.Read());
        }
Beispiel #40
0
        internal void WriteToken(JsonReader reader, int initialDepth)
        {
            do
            {
                switch (reader.TokenType)
                {
                case JsonToken.None:
                    // read to next
                    break;

                case JsonToken.StartObject:
                    WriteStartObject();
                    break;

                case JsonToken.StartArray:
                    WriteStartArray();
                    break;

                case JsonToken.StartConstructor:
                    string constructorName = reader.Value.ToString();
                    // write a JValue date when the constructor is for a date
                    if (string.Compare(constructorName, "Date", StringComparison.Ordinal) == 0)
                    {
                        WriteConstructorDate(reader);
                    }
                    else
                    {
                        WriteStartConstructor(reader.Value.ToString());
                    }
                    break;

                case JsonToken.PropertyName:
                    WritePropertyName(reader.Value.ToString());
                    break;

                case JsonToken.Comment:
                    WriteComment(reader.Value.ToString());
                    break;

                case JsonToken.Integer:
                    WriteValue((long)reader.Value);
                    break;

                case JsonToken.Float:
                    WriteValue((double)reader.Value);
                    break;

                case JsonToken.String:
                    WriteValue(reader.Value.ToString());
                    break;

                case JsonToken.Boolean:
                    WriteValue((bool)reader.Value);
                    break;

                case JsonToken.Null:
                    WriteNull();
                    break;

                case JsonToken.Undefined:
                    WriteUndefined();
                    break;

                case JsonToken.EndObject:
                    WriteEndObject();
                    break;

                case JsonToken.EndArray:
                    WriteEndArray();
                    break;

                case JsonToken.EndConstructor:
                    WriteEndConstructor();
                    break;

                case JsonToken.Date:
                    WriteValue((DateTime)reader.Value);
                    break;

                case JsonToken.Raw:
                    WriteRawValue((string)reader.Value);
                    break;

                case JsonToken.Bytes:
                    WriteValue((byte[])reader.Value);
                    break;

                default:
                    throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", reader.TokenType, "Unexpected token type.");
                }
            }while (
                // stop if we have reached the end of the token being read
                initialDepth - 1 < reader.Depth - (IsEndToken(reader.TokenType) ? 1 : 0) &&
                reader.Read());
        }
        /// <summary>
        /// Reads the next JSON token from the stream.
        /// </summary>
        /// <returns>
        /// true if the next token was read successfully; false if there are no more tokens to read.
        /// </returns>
        public override bool Read()
        {
            if (!_reader.Read())
            {
                return(false);
            }

            if (_reader.TokenType == JsonToken.Comment)
            {
                return(true);
            }

            // first time Read has been called. build model
            if (_model == null)
            {
                JsonSchemaModelBuilder builder = new JsonSchemaModelBuilder();
                _model = builder.Build(_schema);
            }

            switch (_reader.TokenType)
            {
            case JsonToken.StartObject:
                ProcessValue();
                JsonSchemaModel objectSchema = (ValidateObject(CurrentMemberSchema))
            ? CurrentMemberSchema
            : null;
                Push(new SchemaScope(JTokenType.Object, objectSchema));
                break;

            case JsonToken.StartArray:
                ProcessValue();
                JsonSchemaModel arraySchema = (ValidateArray(CurrentMemberSchema))
            ? CurrentMemberSchema
            : null;
                Push(new SchemaScope(JTokenType.Array, arraySchema));
                break;

            case JsonToken.StartConstructor:
                Push(new SchemaScope(JTokenType.Constructor, null));
                break;

            case JsonToken.PropertyName:
                ValidatePropertyName(CurrentSchema);
                break;

            case JsonToken.Raw:
                break;

            case JsonToken.Integer:
                ProcessValue();
                ValidateInteger(CurrentMemberSchema);
                break;

            case JsonToken.Float:
                ProcessValue();
                ValidateFloat(CurrentMemberSchema);
                break;

            case JsonToken.String:
                ProcessValue();
                ValidateString(CurrentMemberSchema);
                break;

            case JsonToken.Boolean:
                ProcessValue();
                ValidateBoolean(CurrentMemberSchema);
                break;

            case JsonToken.Null:
                ProcessValue();
                ValidateNull(CurrentMemberSchema);
                break;

            case JsonToken.Undefined:
                break;

            case JsonToken.EndObject:
                ValidateEndObject(CurrentSchema);
                Pop();
                break;

            case JsonToken.EndArray:
                ValidateEndArray(CurrentSchema);
                Pop();
                break;

            case JsonToken.EndConstructor:
                Pop();
                break;

            case JsonToken.Date:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(true);
        }
Beispiel #42
0
        private void DeserializeValue(Newtonsoft.Json.JsonReader reader, XmlDocument document, XmlNamespaceManager manager, string propertyName, XmlNode currentNode)
        {
            // deserialize xml element
            bool finishedAttributes = false;
            bool finishedElement    = false;
            Dictionary <string, string> attributeNameValues = new Dictionary <string, string>();

            // a string token means the element only has a single text child
            if (reader.TokenType != JsonToken.String &&
                reader.TokenType != JsonToken.Null &&
                reader.TokenType != JsonToken.Boolean &&
                reader.TokenType != JsonToken.Integer &&
                reader.TokenType != JsonToken.Float &&
                reader.TokenType != JsonToken.Date &&
                reader.TokenType != JsonToken.StartConstructor)
            {
                // read properties until first non-attribute is encountered
                while (!finishedAttributes && !finishedElement && reader.Read())
                {
                    switch (reader.TokenType)
                    {
                    case JsonToken.PropertyName:
                        string attributeName = reader.Value.ToString();

                        if (attributeName[0] == '@')
                        {
                            attributeName = attributeName.Substring(1);
                            reader.Read();
                            string attributeValue = reader.Value.ToString();
                            attributeNameValues.Add(attributeName, attributeValue);
                        }
                        else
                        {
                            finishedAttributes = true;
                        }
                        break;

                    case JsonToken.EndObject:
                        finishedElement = true;
                        break;

                    default:
                        throw new JsonSerializationException("Unexpected JsonToken: " + reader.TokenType);
                    }
                }
            }

            // have to wait until attributes have been parsed before creating element
            // attributes may contain namespace info used by the element
            XmlElement element = document.CreateElement(propertyName);

            currentNode.AppendChild(element);

            // add attributes to newly created element
            foreach (KeyValuePair <string, string> nameValue in attributeNameValues)
            {
                XmlAttribute attribute = document.CreateAttribute(nameValue.Key);

                attribute.Value = nameValue.Value;

                element.SetAttributeNode(attribute);
            }

            if (reader.TokenType == JsonToken.String)
            {
                element.AppendChild(document.CreateTextNode(reader.Value.ToString()));
            }
            else if (reader.TokenType == JsonToken.Integer)
            {
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString((long)reader.Value)));
            }
            else if (reader.TokenType == JsonToken.Float)
            {
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString((double)reader.Value)));
            }
            else if (reader.TokenType == JsonToken.Boolean)
            {
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString((bool)reader.Value)));
            }
            else if (reader.TokenType == JsonToken.Date)
            {
                DateTime d = (DateTime)reader.Value;
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString(d, ToSerializationMode(d.Kind))));
            }
            else if (reader.TokenType == JsonToken.Null)
            {
                // empty element. do nothing
            }
            else
            {
                // finished element will have no children to deserialize
                if (!finishedElement)
                {
                    manager.PushScope();

                    DeserializeNode(reader, document, manager, element);

                    manager.PopScope();
                }
            }
        }
Beispiel #43
0
        internal void WriteToken(JsonReader reader, int initialDepth)
        {
            do
            {
                switch (reader.TokenType)
                {
                case JsonToken.None:
                    // read to next
                    break;

                case JsonToken.StartObject:
                    WriteStartObject();
                    break;

                case JsonToken.StartArray:
                    WriteStartArray();
                    break;

                case JsonToken.StartConstructor:
                    string constructorName = reader.Value.ToString();
                    // write a JValue date when the constructor is for a date
                    if (string.Equals(constructorName, "Date", StringComparison.Ordinal))
                    {
                        WriteConstructorDate(reader);
                    }
                    else
                    {
                        WriteStartConstructor(reader.Value.ToString());
                    }
                    break;

                case JsonToken.PropertyName:
                    WritePropertyName(reader.Value.ToString());
                    break;

                case JsonToken.Comment:
                    WriteComment((reader.Value != null) ? reader.Value.ToString() : null);
                    break;

                case JsonToken.Integer:
                    WriteValue(Convert.ToInt64(reader.Value, CultureInfo.InvariantCulture));
                    break;

                case JsonToken.Float:
                    object value = reader.Value;

                    if (value is decimal)
                    {
                        WriteValue((decimal)value);
                    }
                    else if (value is double)
                    {
                        WriteValue((double)value);
                    }
                    else if (value is float)
                    {
                        WriteValue((float)value);
                    }
                    else
                    {
                        WriteValue(Convert.ToDouble(value, CultureInfo.InvariantCulture));
                    }
                    break;

                case JsonToken.String:
                    WriteValue(reader.Value.ToString());
                    break;

                case JsonToken.Boolean:
                    WriteValue(Convert.ToBoolean(reader.Value, CultureInfo.InvariantCulture));
                    break;

                case JsonToken.Null:
                    WriteNull();
                    break;

                case JsonToken.Undefined:
                    WriteUndefined();
                    break;

                case JsonToken.EndObject:
                    WriteEndObject();
                    break;

                case JsonToken.EndArray:
                    WriteEndArray();
                    break;

                case JsonToken.EndConstructor:
                    WriteEndConstructor();
                    break;

                case JsonToken.Date:
#if !PocketPC && !NET20
                    if (reader.Value is DateTimeOffset)
                    {
                        WriteValue((DateTimeOffset)reader.Value);
                    }
                    else
#endif
                    WriteValue(Convert.ToDateTime(reader.Value, CultureInfo.InvariantCulture));
                    break;

                case JsonToken.Raw:
                    WriteRawValue((reader.Value != null) ? reader.Value.ToString() : null);
                    break;

                case JsonToken.Bytes:
                    WriteValue((byte[])reader.Value);
                    break;

                default:
                    throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", reader.TokenType, "Unexpected token type.");
                }
            }while (
                // stop if we have reached the end of the token being read
                initialDepth - 1 < reader.Depth - (IsEndToken(reader.TokenType) ? 1 : 0) &&
                reader.Read());
        }