コード例 #1
0
        private IEnumerable <object> ReadArrayValue(JsonReader jsonReader)
        {
            this.IncreaseRecursionDepth();
            List <object> list = new List <object>();

            jsonReader.ReadNext();
            while (jsonReader.NodeType != JsonNodeType.EndArray)
            {
                switch (jsonReader.NodeType)
                {
                case JsonNodeType.StartObject:
                {
                    list.Add(this.ReadObjectValue(jsonReader));
                    continue;
                }

                case JsonNodeType.StartArray:
                {
                    list.Add(this.ReadArrayValue(jsonReader));
                    continue;
                }

                case JsonNodeType.PrimitiveValue:
                {
                    list.Add(jsonReader.ReadPrimitiveValue());
                    continue;
                }
                }
                return(null);
            }
            jsonReader.ReadEndArray();
            this.DecreaseRecursionDepth();
            return(list);
        }
コード例 #2
0
        private IDictionary <string, object> ReadObjectValue(JsonReader jsonReader)
        {
            this.IncreaseRecursionDepth();
            IDictionary <string, object> dictionary = new Dictionary <string, object>(StringComparer.Ordinal);

            jsonReader.ReadNext();
            while (jsonReader.NodeType != JsonNodeType.EndObject)
            {
                string key  = jsonReader.ReadPropertyName();
                object obj2 = null;
                switch (jsonReader.NodeType)
                {
                case JsonNodeType.StartObject:
                    obj2 = this.ReadObjectValue(jsonReader);
                    break;

                case JsonNodeType.StartArray:
                    obj2 = this.ReadArrayValue(jsonReader);
                    break;

                case JsonNodeType.PrimitiveValue:
                    obj2 = jsonReader.ReadPrimitiveValue();
                    break;

                default:
                    return(null);
                }
                dictionary.Add(key, obj2);
            }
            jsonReader.ReadEndObject();
            this.DecreaseRecursionDepth();
            return(dictionary);
        }
コード例 #3
0
        /// <summary>
        /// Reads the json object value from the jsonReader
        /// </summary>
        /// <param name="jsonReader">Json reader to read payload from the wire.</param>
        /// <param name="insideJsonObjectValue">true if the reader is positioned on the first property of the value which is a JSON Object
        /// (or the second property if the first one was odata.type).</param>
        /// <param name="inputContext">The input context with all the settings.</param>
        /// <param name="recursionDepth">The recursion depth to start with.</param>
        /// <returns>an instance of IDictionary containing the spatial value.</returns>
        private static IDictionary <string, object> ReadObjectValue(JsonReader jsonReader, bool insideJsonObjectValue, ODataInputContext inputContext, int recursionDepth)
        {
            DebugUtils.CheckNoExternalCallers();
            Debug.Assert(jsonReader != null, "jsonReader != null");
            Debug.Assert(insideJsonObjectValue || jsonReader.NodeType == JsonNodeType.StartObject, "insideJsonObjectValue || jsonReader.NodeType == JsonNodeType.StartObject");
            Debug.Assert(
                !insideJsonObjectValue || jsonReader.NodeType == JsonNodeType.Property || jsonReader.NodeType == JsonNodeType.EndObject,
                "!insideJsonObjectValue || jsonReader.NodeType == JsonNodeType.Property || jsonReader.NodeType == JsonNodeType.EndObject");
            Debug.Assert(inputContext != null, "inputContext != null");

            ValidationUtils.IncreaseAndValidateRecursionDepth(ref recursionDepth, inputContext.MessageReaderSettings.MessageQuotas.MaxNestingDepth);

            IDictionary <string, object> jsonValue = new Dictionary <string, object>(StringComparer.Ordinal);

            if (!insideJsonObjectValue)
            {
                // Note that if the insideJsonObjectValue is true we will ignore the odata.type instance annotation
                // which might have been there. This is OK since for spatial we only need the normal properties anyway.
                jsonReader.ReadNext();
            }

            while (jsonReader.NodeType != JsonNodeType.EndObject)
            {
                // read the property name
                string propertyName = jsonReader.ReadPropertyName();

                // read the property value
                object propertyValue = null;
                switch (jsonReader.NodeType)
                {
                case JsonNodeType.PrimitiveValue:
                    propertyValue = jsonReader.ReadPrimitiveValue();
                    break;

                case JsonNodeType.StartArray:
                    propertyValue = ReadArrayValue(jsonReader, inputContext, recursionDepth);
                    break;

                case JsonNodeType.StartObject:
                    propertyValue = ReadObjectValue(jsonReader, /*insideJsonObjectValue*/ false, inputContext, recursionDepth);
                    break;

                default:
                    Debug.Assert(false, "We should never reach here - There should be matching end element");
                    return(null);
                }

                jsonValue.Add(propertyName, propertyValue);
            }

            jsonReader.ReadEndObject();

            return(jsonValue);
        }
コード例 #4
0
        internal static string ReadStringValue(this JsonReader jsonReader)
        {
            object obj2 = jsonReader.ReadPrimitiveValue();
            string str  = obj2 as string;

            if ((obj2 != null) && (str == null))
            {
                throw CreateException(Strings.JsonReaderExtensions_CannotReadValueAsString(obj2));
            }
            return(str);
        }
コード例 #5
0
        internal static double?ReadDoubleValue(this JsonReader jsonReader)
        {
            object obj2     = jsonReader.ReadPrimitiveValue();
            double?nullable = obj2 as double?;

            if ((obj2 == null) || nullable.HasValue)
            {
                return(nullable);
            }
            int?nullable2 = obj2 as int?;

            if (!nullable2.HasValue)
            {
                throw CreateException(Strings.JsonReaderExtensions_CannotReadValueAsDouble(obj2));
            }
            return(new double?((double)nullable2.Value));
        }
コード例 #6
0
        /// <summary>
        /// Read the json array from the reader.
        /// </summary>
        /// <param name="jsonReader">JsonReader instance.</param>
        /// <param name="inputContext">The input context with all the settings.</param>
        /// <param name="recursionDepth">The recursion depth to start with.</param>
        /// <returns>a list of json objects.</returns>
        private static IEnumerable <object> ReadArrayValue(JsonReader jsonReader, ODataInputContext inputContext, int recursionDepth)
        {
            DebugUtils.CheckNoExternalCallers();
            Debug.Assert(jsonReader != null, "jsonReader != null");
            Debug.Assert(jsonReader.NodeType == JsonNodeType.StartArray, "jsonReader.NodeType == JsonNodeType.StartArray");
            Debug.Assert(inputContext != null, "inputContext != null");

            ValidationUtils.IncreaseAndValidateRecursionDepth(ref recursionDepth, inputContext.MessageReaderSettings.MessageQuotas.MaxNestingDepth);

            List <object> array = new List <object>();

            jsonReader.ReadNext();
            while (jsonReader.NodeType != JsonNodeType.EndArray)
            {
                switch (jsonReader.NodeType)
                {
                case JsonNodeType.PrimitiveValue:
                    array.Add(jsonReader.ReadPrimitiveValue());
                    break;

                case JsonNodeType.StartObject:
                    array.Add(ReadObjectValue(jsonReader, /*insideJsonObjectValue*/ false, inputContext, recursionDepth));
                    break;

                case JsonNodeType.StartArray:
                    array.Add(ReadArrayValue(jsonReader, inputContext, recursionDepth));
                    break;

                default:
                    Debug.Assert(false, "We should never have got here - the valid states in array are primitive value or object");
                    return(null);
                }
            }

            jsonReader.ReadEndArray();

            return(array);
        }
コード例 #7
0
 private IEnumerable<object> ReadArrayValue(JsonReader jsonReader)
 {
     this.IncreaseRecursionDepth();
     List<object> list = new List<object>();
     jsonReader.ReadNext();
     while (jsonReader.NodeType != JsonNodeType.EndArray)
     {
         switch (jsonReader.NodeType)
         {
             case JsonNodeType.StartObject:
             {
                 list.Add(this.ReadObjectValue(jsonReader));
                 continue;
             }
             case JsonNodeType.StartArray:
             {
                 list.Add(this.ReadArrayValue(jsonReader));
                 continue;
             }
             case JsonNodeType.PrimitiveValue:
             {
                 list.Add(jsonReader.ReadPrimitiveValue());
                 continue;
             }
         }
         return null;
     }
     jsonReader.ReadEndArray();
     this.DecreaseRecursionDepth();
     return list;
 }
コード例 #8
0
        private IDictionary<string, object> ReadObjectValue(JsonReader jsonReader)
        {
            this.IncreaseRecursionDepth();
            IDictionary<string, object> dictionary = new Dictionary<string, object>(StringComparer.Ordinal);
            jsonReader.ReadNext();
            while (jsonReader.NodeType != JsonNodeType.EndObject)
            {
                string key = jsonReader.ReadPropertyName();
                object obj2 = null;
                switch (jsonReader.NodeType)
                {
                    case JsonNodeType.StartObject:
                        obj2 = this.ReadObjectValue(jsonReader);
                        break;

                    case JsonNodeType.StartArray:
                        obj2 = this.ReadArrayValue(jsonReader);
                        break;

                    case JsonNodeType.PrimitiveValue:
                        obj2 = jsonReader.ReadPrimitiveValue();
                        break;

                    default:
                        return null;
                }
                dictionary.Add(key, obj2);
            }
            jsonReader.ReadEndObject();
            this.DecreaseRecursionDepth();
            return dictionary;
        }
コード例 #9
0
        /// <summary>
        /// Read the json array from the reader.
        /// </summary>
        /// <param name="jsonReader">JsonReader instance.</param>
        /// <returns>a list of json objects.</returns>
        private IEnumerable<object> ReadArrayValue(JsonReader jsonReader)
        {
            Debug.Assert(jsonReader != null, "jsonReader != null");
            Debug.Assert(jsonReader.NodeType == JsonNodeType.StartArray, "jsonReader.NodeType == JsonNodeType.StartArray");

            this.IncreaseRecursionDepth();

            List<object> array = new List<object>();
            jsonReader.ReadNext();
            while (jsonReader.NodeType != JsonNodeType.EndArray)
            {
                switch (jsonReader.NodeType)
                {
                    case JsonNodeType.PrimitiveValue:
                        array.Add(jsonReader.ReadPrimitiveValue());
                        break;
                    case JsonNodeType.StartObject:
                        array.Add(this.ReadObjectValue(jsonReader));
                        break;
                    case JsonNodeType.StartArray:
                        array.Add(this.ReadArrayValue(jsonReader));
                        break;
                    default:
                        Debug.Assert(false, "We should never have got here - the valid states in array are primitive value or object");
                        return null;
                }
            }

            jsonReader.ReadEndArray();
            this.DecreaseRecursionDepth();

            return array;
        }
コード例 #10
0
        /// <summary>
        /// Reads the json object value from the jsonReader
        /// </summary>
        /// <param name="jsonReader">Json reader to read payload from the wire.</param>
        /// <returns>an instance of IDictionary containing the spatial value.</returns>
        private IDictionary<string, object> ReadObjectValue(JsonReader jsonReader)
        {
            Debug.Assert(jsonReader != null, "jsonReader != null");
            Debug.Assert(jsonReader.NodeType == JsonNodeType.StartObject, "jsonReader.NodeType == JsonNodeType.StartObject");

            this.IncreaseRecursionDepth();

            IDictionary<string, object> jsonValue = new Dictionary<string, object>(StringComparer.Ordinal);
            jsonReader.ReadNext();
            while (jsonReader.NodeType != JsonNodeType.EndObject)
            {
                // read the property name
                string propertyName = jsonReader.ReadPropertyName();

                // read the property value
                object propertyValue = null;
                switch (jsonReader.NodeType)
                {
                    case JsonNodeType.PrimitiveValue:
                        propertyValue = jsonReader.ReadPrimitiveValue();
                        break;
                    case JsonNodeType.StartArray:
                        propertyValue = this.ReadArrayValue(jsonReader);
                        break;
                    case JsonNodeType.StartObject:
                        propertyValue = this.ReadObjectValue(jsonReader);
                        break;
                    default:
                        Debug.Assert(false, "We should never reach here - There should be matching end element");
                        return null;
                }

                jsonValue.Add(propertyName, propertyValue);
            }

            jsonReader.ReadEndObject();
            this.DecreaseRecursionDepth();

            return jsonValue;
        }