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 object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            reader.Read();

            Debug.Assert(reader.TokenType == JsonToken.PropertyName);
            Debug.Assert((string)reader.Value == "coordinates");

            if (objectType == typeof(Coordinate))
            {
                return ReadJsonCoordinate(reader);
            }

            if (typeof(IEnumerable<Coordinate>).IsAssignableFrom(objectType))
            {
                return ReadJsonCoordinates(reader);
            }

            if (typeof(List<Coordinate[]>).IsAssignableFrom(objectType))
            {
                return ReadJsonCoordinatesEnumerable(reader);
            }
            if (typeof(List<List<Coordinate[]>>).IsAssignableFrom(objectType))
            {
                return ReadJsonCoordinatesEnumerable2(reader);
            }

            throw new Exception();
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            reader.Read();
            if (!(reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "geometries"))
            {
                throw new Exception();
            }
            reader.Read();
            if (reader.TokenType != JsonToken.StartArray)
                throw new Exception();

            reader.Read();
            List<IGeometry> geoms = new List<IGeometry>();
            while (reader.TokenType != JsonToken.EndArray)
            {
                JObject obj = (JObject)serializer.Deserialize(reader);
                GeoJsonObjectType geometryType = (GeoJsonObjectType)Enum.Parse(typeof(GeoJsonObjectType), obj.Value<string>("type"));

                switch (geometryType)
                {
                    case GeoJsonObjectType.Point:
                        geoms.Add(this._factory.CreatePoint(ToCoordinate(obj.Value<JArray>("coordinates"))));
                        break;
                    case GeoJsonObjectType.LineString:
                        geoms.Add(this._factory.CreateLineString(ToCoordinates(obj.Value<JArray>("coordinates"))));
                        break;
                    case GeoJsonObjectType.Polygon:
                        geoms.Add(this.CreatePolygon(ToListOfCoordinates(obj.Value<JArray>("coordinates"))));
                        break;
                    case GeoJsonObjectType.MultiPoint:
                        geoms.Add(this._factory.CreateMultiPoint(ToCoordinates(obj.Value<JArray>("coordinates"))));
                        break;
                    case GeoJsonObjectType.MultiLineString:
                        geoms.Add(this.CreateMultiLineString(ToListOfCoordinates(obj.Value<JArray>("coordinates"))));
                        break;
                    case GeoJsonObjectType.MultiPolygon:
                        geoms.Add(this.CreateMultiPolygon(ToListOfListOfCoordinates(obj.Value<JArray>("coordinates"))));
                        break;
                    case GeoJsonObjectType.GeometryCollection:
                        throw new NotSupportedException();

                }
                reader.Read();
            }
            return geoms;
        }
        private Model ReadModel(JsonReader reader) {
            while (reader.TokenType == JsonToken.Comment) {
                if (!reader.Read()) throw new JsonSerializationException("Unexpected Token when converting Model object");
            }

            if (reader.TokenType != JsonToken.StartObject) {
                throw new JsonSerializationException("Unexpected Token when converting Model object");
            }

            var obj = new Model { };

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

                        if (!reader.Read()) {
                            throw new JsonSerializationException("Unexpected end when reading Model object");
                        }

                        if (propertyName == "Id") {
                            obj.Id = (string)this.ReadValue(reader);
                            break;
                        }

                        if (propertyName == "_shurikenMeta") {
                            obj._shurikenMeta = this.ReadMetaData(reader);
                            break;
                        }

                        var v = this.ReadValue(reader);

                        obj[propertyName] = v;
                        break;
                    case JsonToken.Comment:
                        break;
                    case JsonToken.EndObject:
                        return obj;
                }
            }

            throw new JsonSerializationException("Unexpected end when reading Model object");
        }
            public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
                                            JsonSerializer serializer)
            {
                var list = (IList) Activator.CreateInstance(objectType);

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

                    reader.Read(); //CrlType prop name
                    reader.Read(); //actual type

                    Type type = Type.GetType((string) reader.Value);

                    reader.Read(); // value property
                    reader.Read(); // actual value
                    object item = serializer.Deserialize(reader, type);
                    list.Add(item);
                    reader.Read(); // end object
                }
                return list;
            }
		private async Task<int> ImportIndexes(JsonReader jsonReader, SmugglerOptions options)
		{
			var count = 0;

			if (jsonReader.Read() == false)
				return count;
			if (jsonReader.TokenType != JsonToken.PropertyName)
				throw new InvalidDataException("PropertyName was expected");
			if (Equals("Indexes", jsonReader.Value) == false)
				throw new InvalidDataException("Indexes property was expected");
			if (jsonReader.Read() == false)
				return count;
			if (jsonReader.TokenType != JsonToken.StartArray)
				throw new InvalidDataException("StartArray was expected");

			while (jsonReader.Read() && jsonReader.TokenType != JsonToken.EndArray)
			{
				var index = (RavenJObject)RavenJToken.ReadFrom(jsonReader);
				if ((options.OperateOnTypes & ItemType.Indexes) != ItemType.Indexes)
					continue;

				var indexName = index.Value<string>("name");
				if (indexName.StartsWith("Temp/"))
					continue;
				if (index.Value<RavenJObject>("definition").Value<bool>("IsCompiled"))
					continue; // can't import compiled indexes

			    if ((options.OperateOnTypes & ItemType.RemoveAnalyzers) == ItemType.RemoveAnalyzers)
			    {
			        index.Value<RavenJObject>("definition").Remove("Analyzers");
			    }

				await PutIndex(indexName, index);

				count++;
			}

			await PutIndex(null, null);

			return count;
		}
Exemple #7
0
    internal void WriteToken(JsonReader reader, int initialDepth, bool writeChildren)
    {
      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)
        && writeChildren
        && reader.Read());
    }
        private static void Read(JsonReader jsonReader, string arrayName, Action<RavenJToken> process)
        {
            if (jsonReader.Read() == false)
                return;
            if (jsonReader.TokenType != JsonToken.PropertyName)
                throw new InvalidDataException("PropertyName was expected");
            if (Equals(arrayName, jsonReader.Value) == false)
                throw new InvalidDataException(arrayName + " property was expected");
            if (jsonReader.Read() == false)
                return;
            if (jsonReader.TokenType != JsonToken.StartArray)
                throw new InvalidDataException("StartArray was expected");

            while (jsonReader.Read() && jsonReader.TokenType != JsonToken.EndArray)
            {
                var token = RavenJToken.ReadFrom(jsonReader);
                process(token);
            }
        }
        private Model.MetaData ReadMetaData(JsonReader reader) {
            if (reader.TokenType == JsonToken.Null) {
                return null;
            }

            var obj = new Model.MetaData { };
            var t = obj.GetType();

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

                        if (!reader.Read()) {
                            throw new JsonSerializationException("Unexpected end when reading Model object");
                        }

                        var p = t.GetProperty(propertyName);

                        if (p.PropertyType == typeof(DateTime)) {
                            var d = DateTime.Parse(reader.Value as string).ToUniversalTime();
                            p.SetValue(obj, d);
                            break;
                        }

                        p.SetValue(obj, reader.Value);
                        break;
                    case JsonToken.Comment:
                        break;
                    case JsonToken.EndObject:
                        return obj;
                }
            }

            throw new JsonSerializationException("Unexpected end when reading Model object");
        }
        private static Coordinate[] ReadJsonCoordinates(JsonReader reader)
        {
            reader.Read();
            if (reader.TokenType != JsonToken.StartArray) return null;

            List<Coordinate> coordinates = new List<Coordinate>();
            while (true)
            {
                Coordinate c = ReadJsonCoordinate(reader);
                if (c == null) break;
                coordinates.Add(c);
            }
            Debug.Assert(reader.TokenType == JsonToken.EndArray);
            return coordinates.ToArray();
        }
Exemple #11
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            reader.Read();
            if (!(reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "type"))
            {
                throw new Exception();
            }
            reader.Read();
            if (reader.TokenType != JsonToken.String)
            {
                throw new Exception();
            }

            GeoJsonObjectType geometryType = (GeoJsonObjectType)Enum.Parse(typeof (GeoJsonObjectType), (string) reader.Value);
            switch (geometryType)
            {
                case GeoJsonObjectType.Point:
                    Coordinate coordinate = serializer.Deserialize<Coordinate>(reader);
                    return this._factory.CreatePoint(coordinate);
                
                case GeoJsonObjectType.LineString:
                    Coordinate[] coordinates = serializer.Deserialize<Coordinate[]>(reader);
                    return this._factory.CreateLineString(coordinates);
                
                case GeoJsonObjectType.Polygon:
                    List<Coordinate[]> coordinatess = serializer.Deserialize<List<Coordinate[]>>(reader);
                    return this.CreatePolygon(coordinatess);

                case GeoJsonObjectType.MultiPoint:
                    coordinates = serializer.Deserialize<Coordinate[]>(reader);
                    return this._factory.CreateMultiPoint(coordinates);

                case GeoJsonObjectType.MultiLineString:
                    coordinatess = serializer.Deserialize<List<Coordinate[]>>(reader);
                    List<ILineString> strings = new List<ILineString>();
                    for (int i = 0; i < coordinatess.Count; i++)
                        strings.Add(this._factory.CreateLineString(coordinatess[i]));
                    return this._factory.CreateMultiLineString(strings.ToArray());
                
                case GeoJsonObjectType.MultiPolygon:
                    List<List<Coordinate[]>> coordinatesss = serializer.Deserialize<List<List<Coordinate[]>>>(reader);
                    List<IPolygon> polygons = new List<IPolygon>();
                    foreach (List<Coordinate[]> coordinateses in coordinatesss)
                        polygons.Add(this.CreatePolygon(coordinateses));
                    return this._factory.CreateMultiPolygon(polygons.ToArray());

                case GeoJsonObjectType.GeometryCollection:
                    List<IGeometry> geoms = serializer.Deserialize<List<IGeometry>>(reader);
                    return this._factory.CreateGeometryCollection(geoms.ToArray());
                    //ReadJson(reader,)
            }

            return null;
        }
        private object ReadObject(JsonReader reader) {
            var obj = new Dough();

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

                        if (!reader.Read()) {
                            throw new JsonSerializationException("Unexpected end when reading Model object");
                        }

                        var v = this.ReadValue(reader);

                        obj[propertyName] = v;
                        break;
                    case JsonToken.Comment:
                        break;
                    case JsonToken.EndObject:
                        return obj;
                }
            }

            throw new JsonSerializationException("Unexpected end when reading Model object");
        }
        private object ReadArray(JsonReader reader) {
            IList<object> list = new List<object>();

            while (reader.Read()) {
                switch (reader.TokenType) {
                    case JsonToken.Comment:
                        break;
                    default:
                        var v = this.ReadValue(reader);

                        list.Add(v);
                        break;
                    case JsonToken.EndArray:
                        return list;
                }
            }

            throw new JsonSerializationException("Unexpected end when reading Model object");
        }
        private object ReadValue(JsonReader reader) {
            while (reader.TokenType == JsonToken.Comment) {
                if (!reader.Read()) throw new JsonSerializationException("Unexpected Token when converting Model object");
            }

            switch (reader.TokenType) {
                case JsonToken.StartObject:
                    return this.ReadObject(reader);
                case JsonToken.StartArray:
                    return this.ReadArray(reader);
                case JsonToken.Integer:
                case JsonToken.Float:
                case JsonToken.String:
                case JsonToken.Boolean:
                case JsonToken.Undefined:
                case JsonToken.Null:
                case JsonToken.Date:
                case JsonToken.Bytes:
                    return reader.Value;
                default:
                    throw new JsonSerializationException
                        (string.Format("Unexpected token when converting Model object: {0}", reader.TokenType));
            }
        }
Exemple #15
0
 internal void WriteToken(JsonReader reader, int initialDepth, bool writeChildren, bool writeDateConstructorAsDate)
 {
     do
     {
         // write a JValue date when the constructor is for a date
         if (writeDateConstructorAsDate && reader.TokenType == JsonToken.StartConstructor && string.Equals(reader.Value.ToString(), "Date", StringComparison.Ordinal))
             WriteConstructorDate(reader);
         else
             WriteTokenInternal(reader.TokenType, reader.Value);
     } while (
         // stop if we have reached the end of the token being read
         initialDepth - 1 < reader.Depth - (JsonTokenUtils.IsEndToken(reader.TokenType) ? 1 : 0)
         && writeChildren
         && reader.Read());
 }
		private async Task<int> ImportDeletedAttachments(JsonReader jsonReader)
		{
			var count = 0;

			while (jsonReader.Read() && jsonReader.TokenType != JsonToken.EndArray)
			{
				SmugglerOptions.CancelToken.Token.ThrowIfCancellationRequested();

				var item = RavenJToken.ReadFrom(jsonReader);

				var deletedAttachmentInfo =
					new JsonSerializer
					{
						Converters =
							{
								new JsonToJsonConverter(),
                                new StreamFromJsonConverter()
							}
					}.Deserialize<Tombstone>(new RavenJTokenReader(item));

				Operations.ShowProgress("Importing deleted attachments {0}", deletedAttachmentInfo.Key);

				await Operations.DeleteAttachment(deletedAttachmentInfo.Key);

				count++;
			}

			return count;
		}
Exemple #17
0
        private void WriteConstructorDate(JsonReader reader)
        {
            if (!reader.Read())
                throw JsonWriterException.Create(this, "Unexpected end when reading date constructor.", null);
            if (reader.TokenType != JsonToken.Integer)
                throw JsonWriterException.Create(this, "Unexpected token when reading date constructor. Expected Integer, got " + reader.TokenType, null);

            long ticks = (long)reader.Value;
            DateTime date = DateTimeUtils.ConvertJavaScriptTicksToDateTime(ticks);

            if (!reader.Read())
                throw JsonWriterException.Create(this, "Unexpected end when reading date constructor.", null);
            if (reader.TokenType != JsonToken.EndConstructor)
                throw JsonWriterException.Create(this, "Unexpected token when reading date constructor. Expected EndConstructor, got " + reader.TokenType, null);

            WriteValue(date);
        }
		private async Task<int> ImportIndexes(JsonReader jsonReader)
		{
			var count = 0;

			while (jsonReader.Read() && jsonReader.TokenType != JsonToken.EndArray)
			{
				SmugglerOptions.CancelToken.Token.ThrowIfCancellationRequested();

				var index = (RavenJObject)RavenJToken.ReadFrom(jsonReader);
				if ((SmugglerOptions.OperateOnTypes & ItemType.Indexes) != ItemType.Indexes)
					continue;

				var indexName = index.Value<string>("name");
				if (indexName.StartsWith("Temp/"))
					continue;

				var definition = index.Value<RavenJObject>("definition");
				if (definition.Value<bool>("IsCompiled"))
					continue; // can't import compiled indexes

				if ((SmugglerOptions.OperateOnTypes & ItemType.RemoveAnalyzers) == ItemType.RemoveAnalyzers)
				{
					definition.Remove("Analyzers");
				}

				await Operations.PutIndex(indexName, index);

				count++;
			}

			await Operations.PutIndex(null, null);

			return count;
		}
        private static List<List<Coordinate[]>> ReadJsonCoordinatesEnumerable2(JsonReader reader)
        {
            reader.Read();
            if (reader.TokenType != JsonToken.StartArray) return null;
            List<List<Coordinate[]>> coordinates = new List<List<Coordinate[]>>();

            while (true)
            {
                List<Coordinate[]> res = ReadJsonCoordinatesEnumerable(reader);
                if (res == null) break;
                coordinates.Add(res);
            }
            Debug.Assert(reader.TokenType == JsonToken.EndArray);
            return coordinates;
        }
		/// <summary>
		/// Read in all the values from the Json reader and populate a nested ArrayList
		/// </summary>
		/// <param name="reader">JsonReader to use</param>
		/// <param name="serializer">JsonSerializer to use</param>
		/// <param name="elementType">The element type</param>
		/// <returns></returns>
		private List<object> ReadRank(JsonReader reader, JsonSerializer serializer, Type elementType)
		{
			var retVal = new List<object>();

			reader.Read();

			while (reader.TokenType != JsonToken.EndArray && reader.TokenType != JsonToken.Null && reader.TokenType != JsonToken.EndObject)
			{
				// If another array is found, it is a new rank
				// Otherwise, we have a value
				if (reader.TokenType == JsonToken.StartArray)
					retVal.Add(ReadRank(reader, serializer, elementType));
				else
					retVal.Add(serializer.Deserialize(reader, elementType));

				reader.Read();
			}

			return retVal;
		}
        private static Coordinate ReadJsonCoordinate(JsonReader reader)
        {
            reader.Read();
            if (reader.TokenType != JsonToken.StartArray) return null;

            Coordinate c = new Coordinate();
            reader.Read();
            Debug.Assert(reader.TokenType == JsonToken.Float);
            c.X = Convert.ToDouble(reader.Value);
            reader.Read();
            Debug.Assert(reader.TokenType == JsonToken.Float);
            c.Y = Convert.ToDouble(reader.Value);
            reader.Read();
            if (reader.TokenType == JsonToken.Float)
            {
                c.Z = Convert.ToDouble(reader.Value);
                reader.Read();
            }
            Debug.Assert(reader.TokenType == JsonToken.EndArray);

            return c;
        }
Exemple #22
0
        private async Task<int> ImportDeletedDocuments(JsonReader jsonReader, SmugglerOptions options)
        {
            var count = 0;

            while (jsonReader.Read() && jsonReader.TokenType != JsonToken.EndArray)
            {
                var item = RavenJToken.ReadFrom(jsonReader);

                var deletedDocumentInfo =
                    new JsonSerializer
                    {
                        Converters =
							{
								new JsonToJsonConverter(),
                                new StreamFromJsonConverter()
							}
                    }.Deserialize<Tombstone>(new RavenJTokenReader(item));

                ShowProgress("Importing deleted documents {0}", deletedDocumentInfo.Key);

                await DeleteDocument(deletedDocumentInfo.Key);

                count++;
            }

            return count;
        }