Represents a reader that provides fast, non-cached, forward-only access to JSON data over JSON text (RFC 4627).
Inheritance: Jayrock.Json.JsonReaderBase
        public void FromJSON(JsonTextReader reader)
        {
            Dictionary.Clear();

            if (reader.MoveToContent() && reader.TokenClass == JsonTokenClass.Array)
            {
                reader.ReadToken(JsonTokenClass.Array);

                while(reader.TokenClass == JsonTokenClass.Object)
                {
                    reader.ReadToken(JsonTokenClass.Object);

                    //read the 'key'
                    reader.ReadMember();
                    string key = reader.ReadString();

                    string type = null;
                    string stringValue = null;
                    object value = null;

                    //read the 'type'
                    reader.ReadMember();
                    if (reader.TokenClass == JsonTokenClass.Null)
                    {
                        reader.ReadNull();
                        //read the value (should be NULL)
                        reader.ReadMember();
                        if (reader.TokenClass == JsonTokenClass.Null)
                        {
                            reader.ReadNull();
                        }
                        else
                        {
                            stringValue = reader.ReadString();
                        }
                    }
                    else
                    {
                        //read the type
                        type = reader.ReadString();
                        //read the 'value'
                        reader.ReadMember();
                        stringValue = reader.ReadString();
                    }

                    if (!string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(stringValue))
                    {
                        Type t = Type.GetType(type);
                        TypeConverter typeConverter = TypeDescriptor.GetConverter(t);
                        value = typeConverter.ConvertFromString(stringValue);
                    }

                    Dictionary.Add(key, value);

                    reader.ReadToken(JsonTokenClass.EndObject);
                }

                reader.ReadToken(JsonTokenClass.EndArray);
            }
        }
Example #2
0
        public void Complex()
        {
            const string input = @"{'menu': {
                'header': 'SVG Viewer',
                'items': [
                    {'id': 'Open'},
                    {'id': 'OpenNew', 'label': 'Open New'},
                    null,
                    {'id': 'ZoomIn', 'label': 'Zoom In'},
                    {'id': 'ZoomOut', 'label': 'Zoom Out'},
                    {'id': 'OriginalView', 'label': 'Original View'},
                    null,
                    {'id': 'Quality'},
                    {'id': 'Pause'},
                    {'id': 'Mute'},
                    null,
                    {'id': 'Find', 'label': 'Find...'},
                    {'id': 'FindAgain', 'label': 'Find Again'},
                    {'id': 'Copy'},
                    {'id': 'CopyAgain', 'label': 'Copy Again'},
                    {'id': 'CopySVG', 'label': 'Copy SVG'},
                    {'id': 'ViewSVG', 'label': 'View SVG'},
                    {'id': 'ViewSource', 'label': 'View Source'},
                    {'id': 'SaveAs', 'label': 'Save As'},
                    null,
                    {'id': 'Help'},
                    {'id': 'About', 'label': 'About Adobe CVG Viewer...'}
                ]
            }}";

            JsonTextReader reader = new JsonTextReader(new StringReader(input));
            JsonTextWriter writer = new JsonTextWriter();
            JsonRecorder.Record(reader).Playback(writer);
            Assert.AreEqual("{\"menu\":{\"header\":\"SVG Viewer\",\"items\":[{\"id\":\"Open\"},{\"id\":\"OpenNew\",\"label\":\"Open New\"},null,{\"id\":\"ZoomIn\",\"label\":\"Zoom In\"},{\"id\":\"ZoomOut\",\"label\":\"Zoom Out\"},{\"id\":\"OriginalView\",\"label\":\"Original View\"},null,{\"id\":\"Quality\"},{\"id\":\"Pause\"},{\"id\":\"Mute\"},null,{\"id\":\"Find\",\"label\":\"Find...\"},{\"id\":\"FindAgain\",\"label\":\"Find Again\"},{\"id\":\"Copy\"},{\"id\":\"CopyAgain\",\"label\":\"Copy Again\"},{\"id\":\"CopySVG\",\"label\":\"Copy SVG\"},{\"id\":\"ViewSVG\",\"label\":\"View SVG\"},{\"id\":\"ViewSource\",\"label\":\"View Source\"},{\"id\":\"SaveAs\",\"label\":\"Save As\"},null,{\"id\":\"Help\"},{\"id\":\"About\",\"label\":\"About Adobe CVG Viewer...\"}]}}", writer.ToString());
        }
        public object Parse(TextReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("reader");

            JsonReader jsonReader = new JsonTextReader(reader);
            return Parse(jsonReader);
        }
Example #4
0
        public static Geometry Read(TextReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("writer", "A valid text reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            return Read(jreader);
        }
Example #5
0
 /// <summary>
 /// 输入string
 /// 输出json
 /// </summary>
 /// <param name="strJsonText">要输出的json串</param>
 public static void writeStringtoJson(String strJsonText)
 {
     JsonReader reader = new JsonTextReader(new StringReader(strJsonText));
     JsonObject jsonObj = new JsonObject();
     jsonObj.Import(reader);
     HttpContext.Current.Response.Write(jsonObj);
     HttpContext.Current.Response.End();
 }
Example #6
0
        public static void JayrockReaderStrings ()
        {
            for (int i = 0; i < Common.Iterations; i++) {
                StringReader sr = new StringReader (Common.JsonStrings);
                JsonReader reader = new JsonTextReader (sr);

                while (reader.Read ());
            }
        }
Example #7
0
        private static void PrettyColorPrint(string path, TextWriter output, JsonPalette palette) 
        {
            Debug.Assert(output != null);

            using (TextReader input = path.Equals("-") ? Console.In : new StreamReader(path))
            using (JsonTextReader reader = new JsonTextReader(input))
            using (JsonTextWriter writer = new JsonTextWriter(output))
            {
                writer.PrettyPrint = true;
                JsonColorWriter colorWriter = new JsonColorWriter(writer, palette);
                colorWriter.WriteFromReader(reader);
                output.WriteLine();
            }
        }
Example #8
0
        public static string PretifyJson(this string text)
        {
            var input = new StringReader(text);
            var output = new StringWriter();

            using (var reader = new JsonTextReader(input))
            using (var writer = new JsonTextWriter(output))
            {

                writer.PrettyPrint = true;
                writer.WriteFromReader(reader);
            }

            return output.ToString();
        }
        /// <summary>
        /// ������еĸ�������
        /// </summary>
        public static void AddGridViewPropoter(GridView gridList, string josinString)
        {
            if (gridList.Rows.Count > 0)
            {
                Jayrock.Json.JsonReader reader = new Jayrock.Json.JsonTextReader(new System.IO.StringReader(@josinString));
                JsonObject jsonObj = new JsonObject();
                jsonObj.Import(reader);

                JsonArray rowPro = (JsonArray)jsonObj["RowPro"];
                JsonArray colPro = (JsonArray)jsonObj["ColPro"];

                JsonObject item = null;

                for (int i = 0; i < gridList.Rows.Count; i++)
                {

                    gridList.Rows[i].Attributes.Add("id", "div" + i);

                    //���������
                    item = rowPro.GetObject(0);
                    for (int k = 0; k < item.GetNamesArray().Count; k++)
                    {
                        string n = item.GetNamesArray()[k].ToString();
                        gridList.Rows[i].Attributes.Add(n, string.Format(item[n].ToString(),i));
                    }

                    for (int j = 0; j < gridList.Rows[i].Cells.Count; j++)
                    {
                        gridList.Rows[i].Cells[j].Attributes.Add("id", "div_" + i + "_" + j);

                        //��ӵ�Ԫ������
                        item = null;
                        item = colPro.GetObject(0);
                        for (int k = 0; k < item.GetNamesArray().Count; k++)
                        {
                            string n = item.GetNamesArray()[k].ToString();
                            gridList.Rows[i].Cells[j].Attributes.Add(n,string.Format(item[n].ToString(),i,j));
                        }
                    }
                }

            }
        }
Example #10
0
        public static void JayrockReaderLastProperty ()
        {
            for (int i = 0; i < Common.Iterations; i++) {
                bool found = false;

                StringReader sr = new StringReader (Common.JsonText);

                JsonReader reader = new JsonTextReader (sr);

                while (reader.Read ()) {
                    if (reader.TokenClass == JsonTokenClass.Member &&
                        reader.Text == "LastProperty") {
                        found = true;
                        break;
                    }
                }

                if (! found)
                    Console.WriteLine ("LastProperty not found!");
            }
        }
Example #11
0
        public void FromJSON(Jayrock.Json.JsonTextReader jreader)
        {
            if (jreader == null)
            {
                throw new ArgumentNullException("jreader", "A valid JSON reader object is required.");
            }

            if (jreader.MoveToContent() && jreader.TokenClass == JsonTokenClass.Object)
            {
                jreader.ReadToken(JsonTokenClass.Object);

                //Read the 'FeatureCollection' as the type
                jreader.ReadMember();     //reads 'type'
                jreader.ReadString();     //reads 'FeatureCollection'

                //Read the features
                jreader.ReadMember();
                jreader.ReadToken(JsonTokenClass.Array);
                while (jreader.TokenClass == JsonTokenClass.Object)
                {
                    MemFeature feature = CreateFeature();
                    GeoJSONReader.ReadGISFeature(feature, jreader);
                    Add(feature);
                }
                jreader.ReadToken(JsonTokenClass.EndArray);

                //Read the layer name
                jreader.ReadMember();
                _layerName = jreader.ReadString();

                //Read the key field
                jreader.ReadMember();
                _keyFieldName = jreader.ReadString();

                jreader.ReadToken(JsonTokenClass.EndObject);
            }
        }
Example #12
0
        private static GeometryCollection ReadGeometryCollection(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("reader", "A valid JSON reader object is required.");

            GeometryCollection geometries = null;
            if (jreader.TokenClass == JsonTokenClass.Array)
            {
                jreader.ReadToken(JsonTokenClass.Array);
                    List<Geometry> list = new List<Geometry>();
                    while (jreader.TokenClass == JsonTokenClass.Object)
                    {
                        Geometry geometry = Read(jreader);
                        list.Add(geometry);
                    }
                jreader.ReadToken(JsonTokenClass.EndArray);

                geometries = new GeometryCollection(list.ToArray());
            }
            return geometries;
        }
Example #13
0
        private static Polygon ReadPolygon(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("reader", "A valid JSON reader object is required.");

            Polygon area = null;
            if (jreader.TokenClass == JsonTokenClass.Array)
            {
                jreader.ReadToken(JsonTokenClass.Array);

                //Read the outer shell
                LinearRing shell = null;
                if (jreader.TokenClass == JsonTokenClass.Array)
                {
                    Coordinate[] coordinates = new Coordinate[] { };
                    Read(ref coordinates, jreader);
                    shell = new LinearRing(coordinates);
                }

                //Read all the holes
                List<LinearRing> list = new List<LinearRing>();
                while (jreader.TokenClass == JsonTokenClass.Array)
                {
                    Coordinate[] coordinates = new Coordinate[] { };
                    Read(ref coordinates, jreader);
                    LinearRing hole = new LinearRing(coordinates);
                    list.Add(hole);
                }

                jreader.ReadToken(JsonTokenClass.EndArray);

                //An outer shell was found so a polygon can be created
                if (shell != null)
                {
                    if (list.Count > 0)
                        area = new Polygon(shell, list.ToArray());
                    else
                        area = new Polygon(shell);
                }
            }
            return area;
        }
Example #14
0
        private static Polygon ReadPolygon(TextReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("reader", "A valid text reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            return ReadPolygon(jreader);
        }
Example #15
0
        private static MultiPoint ReadMultiPoint(ref MultiPoint points, TextReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("reader", "A valid text reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            return ReadMultiPoint(jreader);
        }
Example #16
0
        private static Point ReadPoint(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("reader", "A valid JSON reader object is required.");

            Point point = null;
            if (jreader.TokenClass == JsonTokenClass.Array)
            {
                jreader.ReadToken(JsonTokenClass.Array);
                double x = Convert.ToDouble(jreader.ReadNumber());
                double y = Convert.ToDouble(jreader.ReadNumber());
                double z = double.NaN;
                if (jreader.TokenClass == JsonTokenClass.Number)
                    z = Convert.ToDouble(jreader.ReadNumber());
                jreader.ReadToken(JsonTokenClass.EndArray);

                point = new Point(x, y, z);
            }
            return point;
        }
Example #17
0
        private static MultiLineString ReadMultiLineString(TextReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("reader", "A valid text reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            return ReadMultiLineString(jreader);
        }
Example #18
0
        private static MultiPoint ReadMultiPoint(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("reader", "A valid JSON reader object is required.");

            MultiPoint points = null;
            if (jreader.TokenClass == JsonTokenClass.Array)
            {
                jreader.ReadToken(JsonTokenClass.Array);
                List<Point> list = new List<Point>();
                while (jreader.TokenClass == JsonTokenClass.Array)
                {
                    Coordinate item = new Coordinate();
                    Read(ref item, jreader);
                    list.Add(new Point(item));
                }
                jreader.ReadToken(JsonTokenClass.EndArray);

                points = new MultiPoint(list.ToArray());
            }
            return points;
        }
Example #19
0
        public static IAttributesTable ReadAttributesTable(TextReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("reader", "A valid text reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            return ReadAttributesTable(jreader);
        }
Example #20
0
        private static MultiLineString ReadMultiLineString(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("reader", "A valid JSON reader object is required.");

            MultiLineString lines = null;
            if (jreader.TokenClass == JsonTokenClass.Array)
            {
                jreader.ReadToken(JsonTokenClass.Array);
                    List<LineString> list = new List<LineString>();
                    while (jreader.TokenClass == JsonTokenClass.Array)
                    {
                        list.Add(ReadLineString(jreader));
                    }
                jreader.ReadToken(JsonTokenClass.EndArray);

                lines = new MultiLineString(list.ToArray());
            }
            return lines;
        }
Example #21
0
        public static void ReadGISFeature(IGISFeature feature, TextReader reader)
        {
            if (feature == null)
                throw new ArgumentNullException("feature", "A valid feature reference is required.");
            if (reader == null)
                throw new ArgumentNullException("reader", "A valid reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            ReadGISFeature(feature, jreader);
        }
Example #22
0
        public static void Read(ref Coordinate coordinate, JsonTextReader jreader)
        {
            if (coordinate == null)
                throw new ArgumentNullException("coordinate", "A valid coordinate reference is required.");
            if (jreader == null)
                throw new ArgumentNullException("jreader", "A valid JSON reader object is required.");

            if (jreader.MoveToContent() && jreader.TokenClass == JsonTokenClass.Array)
            {
                jreader.ReadToken(JsonTokenClass.Array);
                coordinate.X = Convert.ToDouble(jreader.ReadNumber());
                coordinate.Y = Convert.ToDouble(jreader.ReadNumber());
                coordinate.Z = double.NaN;
                if (jreader.TokenClass == JsonTokenClass.Number)
                    coordinate.Z = Convert.ToDouble(jreader.ReadNumber());
                jreader.ReadToken(JsonTokenClass.EndArray);
            }
        }
Example #23
0
        public static Feature ReadFeature(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("jreader", "A valid JSON reader object is required.");

            Feature feature = new Feature();
            if (jreader.MoveToContent() && jreader.TokenClass == JsonTokenClass.Object)
            {
                jreader.ReadToken(JsonTokenClass.Object);

                //Read the 'Feature' as the type
                jreader.ReadMember(); //reads 'type'
                jreader.ReadString(); //reads 'Feature'

                //Read the 'geometry'
                jreader.ReadMember(); //reads 'geometry'
                feature.Geometry = Read(jreader); //reads the geometry value

                //Read the 'properties'
                jreader.ReadMember(); //reads 'properties'
                feature.Attributes = ReadAttributesTable(jreader);

                jreader.ReadToken(JsonTokenClass.EndObject);
            }
            return feature;
        }
Example #24
0
        void socket_OnNotifyMulticastSocketListener(object sender, NotifyMulticastSocketListenerEventArgs e)
        {
            if (e.Type != MulticastSocketMessageType.MessageReceived)
              {
            if (e.Type == MulticastSocketMessageType.SendException)
            {
              logger.Error(String.Format("Error Sending Message: {0}", e.NewObject));
            }
            else if (e.Type == MulticastSocketMessageType.ReceiveException)
            {
              logger.Error(String.Format("Error Receiving Message: {0}", e.NewObject));
            }
            return;
              }

              bool enteredGate = false;
              try
              {
            String sMessage = GetMessageAsString((byte[])e.NewObject);
            JsonReader reader = new JsonTextReader(new StringReader(sMessage));

            TransportMessage tMessage = null;
            lock (importLock)
            {
              //Console.WriteLine("Importing message {0}", e.Consecutive);
              //This is a method called from different threads -- This way we make only one import at a time.
              tMessage = JsonImportContext.Import<TransportMessage>(reader);
            }

            GateKeeperMethod(e.Consecutive);
            enteredGate = true;

            try
            {
              //1- Notifies the PreDelivery listener
              if (PreDeliveryListener != null)
            PreDeliveryListener.MessageReceived(tMessage, sMessage);

              //2- Notifies the actual target
              var listeners = TransportListeners.Where(tmp => tmp.MessageType == tMessage.MessageType);
              foreach (var listener in listeners)
            listener.MessageReceived(tMessage, sMessage);
            }
            catch (Exception ex)
            {
              logger.Error(String.Format("Error Processing Received Message: {0}", ex.Message));
            }

              }
              catch (Exception ex)
              {
            logger.Error(String.Format("Error Processing Received Message: {0}", ex.Message));
              }

              //It's only called if the thread actually entered the gate. If it didn't, it would wake up another thread that should
              // still be waiting
              if (enteredGate)
            NudgeGate();
        }
Example #25
0
        public static void ReadGISAttributes(IGISAttributes attributes, JsonTextReader jreader)
        {
            if (attributes == null)
                throw new ArgumentNullException("attributes", "A valid attributes reference is required.");
            if (jreader == null)
                throw new ArgumentNullException("jreader", "A valid JSON reader object is required.");

            if (jreader.MoveToContent() && jreader.TokenClass == JsonTokenClass.Object)
            {
                jreader.ReadToken(JsonTokenClass.Object);

                while (jreader.TokenClass == JsonTokenClass.Member)
                {
                    string key = jreader.ReadMember();
                    string value = jreader.ReadString();

                    attributes.SetValue(key, value);
                }

                jreader.ReadToken(JsonTokenClass.EndObject);
            }
        }
Example #26
0
        public static IEnumerable<Feature> ReadFeatureCollection(TextReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("reader", "A valid text reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            return ReadFeatureCollection(jreader);
        }
Example #27
0
        public static IEnumerable<Feature> ReadFeatureCollection(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("jreader", "A valid JSON reader object is required.");

            List<Feature> features = new List<Feature>();
            if (jreader.MoveToContent() && jreader.TokenClass == JsonTokenClass.Object)
            {
                jreader.ReadToken(JsonTokenClass.Object);

                //Read the 'FeatureCollection' as the type
                jreader.ReadMember(); //reads 'type'
                jreader.ReadString(); //reads 'FeatureCollection'

                //Read the 'features' property
                jreader.ReadMember(); //reads 'features'
                if (jreader.TokenClass == JsonTokenClass.Array)
                {
                    jreader.ReadToken(JsonTokenClass.Array);

                    while (jreader.TokenClass == JsonTokenClass.Object)
                    {
                        features.Add(ReadFeature(jreader));
                    }

                    jreader.ReadToken(JsonTokenClass.EndArray);
                }

                jreader.ReadToken(JsonTokenClass.EndObject);
                return features;
            }
            return null;
        }
Example #28
0
        public static void ReadGISAttributes(IGISAttributes attributes, TextReader reader)
        {
            if (attributes == null)
                throw new ArgumentNullException("attributes", "A valid attributes reference is required.");
            if (reader == null)
                throw new ArgumentNullException("reader", "A valid reader object is required.");

            JsonTextReader jreader = new JsonTextReader(reader);
            ReadGISAttributes(attributes, jreader);
        }
Example #29
0
        private static LineString ReadLineString(JsonTextReader jreader)
        {
            if (jreader == null)
                throw new ArgumentNullException("reader", "A valid JSON reader object is required.");

            LineString line = null;
            if (jreader.TokenClass == JsonTokenClass.Array)
            {
                jreader.ReadToken(JsonTokenClass.Array);
                    List<Coordinate> list = new List<Coordinate>();
                    while (jreader.TokenClass == JsonTokenClass.Array)
                    {
                        Coordinate item = new Coordinate();
                        Read(ref item, jreader);
                        list.Add(item);
                    }
                jreader.ReadToken(JsonTokenClass.EndArray);

                line = new LineString(list.ToArray());
            }
            return line;
        }
        protected virtual object ParseRequest(TextReader input)
        {
            if (input == null)
                throw new ArgumentNullException("input");

            JsonReader reader = (JsonReader) _serviceProvider.GetService(typeof(JsonReader));

            if (reader == null)
                reader = new JsonTextReader(input);

            ImportContext importContext = new ImportContext();

            JsonObject request = new JsonObject();
            Method method = null;
            JsonReader paramsReader = null;
            object args = null;

            reader.ReadToken(JsonTokenClass.Object);

            while (reader.TokenClass != JsonTokenClass.EndObject)
            {
                string memberName = reader.ReadMember();

                switch (memberName)
                {
                    case "id" :
                    {
                        request["id"] = importContext.Import(reader);
                        break;
                    }

                    case "method" :
                    {
                        string methodName = reader.ReadString();
                        request["method"] = methodName;
                        method = _service.GetClass().GetMethodByName(methodName);

                        if (paramsReader != null)
                        {
                            //
                            // If the parameters were already read in and
                            // buffer, then deserialize them now that we know
                            // the method we're dealing with.
                            //

                            args = ReadParameters(method, paramsReader, importContext);
                            paramsReader = null;
                        }

                        break;
                    }

                    case "params" :
                    {
                        //
                        // Is the method already known? If so, then we can
                        // deserialize the parameters right away. Otherwise
                        // we record them until hopefully the method is
                        // encountered.
                        //

                        if (method != null)
                        {
                            args = ReadParameters(method, reader, importContext);
                        }
                        else
                        {
                            JsonRecorder recorder = new JsonRecorder();
                            recorder.WriteFromReader(reader);
                            paramsReader = recorder.CreatePlayer();
                        }

                        break;
                    }

                    default:
                    {
                        reader.Skip();
                        break;
                    }
                }
            }

            reader.Read();

            if (args != null)
                request["params"] = args;

            return request;
        }
Example #31
0
        public static void ReadGISFeature(IGISFeature feature, JsonTextReader jreader)
        {
            if (feature == null)
                throw new ArgumentNullException("feature", "A valid feature reference is required.");
            if (jreader == null)
                throw new ArgumentNullException("jreader", "A valid JSON reader object is required.");

            if (jreader.MoveToContent() && jreader.TokenClass == JsonTokenClass.Object)
            {
                jreader.ReadToken(JsonTokenClass.Object);

                //Read the 'Feature' as the type
                jreader.ReadMember(); //reads 'type'
                jreader.ReadString(); //reads 'Feature'

                //Read the 'geometry'
                jreader.ReadMember(); //reads 'geometry'
                feature.Shape = Read(jreader); //reads the geometry value

                //Read the 'properties'
                jreader.ReadMember(); //reads 'properties'
                ReadGISAttributes(feature.Attributes, jreader);

                jreader.ReadToken(JsonTokenClass.EndObject);
            }
        }