Exemplo n.º 1
0
        public static DateTime?ReadDateTimeOrNull(this IJsonReader reader, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }


            var value = default(DateTime?);

            switch (reader.Token)
            {
            case JsonToken.Null:
                value = null;
                break;

            case JsonToken.StringLiteral:
            case JsonToken.Number:
            case JsonToken.DateTime:
                value = reader.Value.AsDateTime;
                break;

            default:
                throw new UnexpectedToken(reader, JsonToken.StringLiteral, JsonToken.Number, JsonToken.DateTime);
            }

            if (!reader.IsEndOfStream() && advance)
            {
                reader.NextToken();
            }

            return(value);
        }
Exemplo n.º 2
0
        public static string ReadString(this IJsonReader reader, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            var stringValue = default(string);

            switch (reader.Token)
            {
            case JsonToken.Null:
                break;

            case JsonToken.StringLiteral:
            case JsonToken.Number:
            case JsonToken.DateTime:
            case JsonToken.Boolean:
                stringValue = Convert.ToString(reader.RawValue, reader.Context.Format);
                break;

            default:
                throw new UnexpectedToken(reader, JsonToken.StringLiteral, JsonToken.Number, JsonToken.DateTime, JsonToken.Boolean);
            }

            if (!reader.IsEndOfStream() && advance)
            {
                reader.NextToken();
            }

            return(stringValue);
        }
Exemplo n.º 3
0
        public static DateTime ReadDateTime(this IJsonReader reader, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }


            var value = default(DateTime);

            if (reader.Token == JsonToken.StringLiteral || reader.Token == JsonToken.Number || reader.Token == JsonToken.DateTime)
            {
                value = reader.Value.AsDateTime;
            }
            else
            {
                throw new UnexpectedToken(reader, JsonToken.StringLiteral, JsonToken.Number, JsonToken.DateTime);
            }

            if (!reader.IsEndOfStream() && advance)
            {
                reader.NextToken();
            }

            return(value);
        }
Exemplo n.º 4
0
        public static bool ReadBoolean(this IJsonReader reader, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }


            var value = default(bool);

            if (reader.Token == JsonToken.StringLiteral || reader.Token == JsonToken.Boolean)
            {
                value = reader.Value.AsBoolean;
            }
            else
            {
                throw new UnexpectedToken(reader, JsonToken.StringLiteral, JsonToken.Boolean);
            }

            if (!reader.IsEndOfStream() && advance)
            {
                reader.NextToken();
            }

            return(value);
        }
Exemplo n.º 5
0
 internal static void ThrowIfEndOfStream(this IJsonReader reader, JsonToken expectedToken)
 {
     if (reader.IsEndOfStream())
     {
         throw new UnexpectedToken(reader, expectedToken);
     }
 }
 public UnexpectedToken(IJsonReader reader, params JsonToken[] expectedTokens) :
     base(
         String.Format("Unexpected token '{0}'. One of these expected: '{1}'.",
                       reader.IsEndOfStream() ? JsonToken.EndOfStream : reader.Token, JoinTokens(expectedTokens)),
         ErrorCode.UnexpectedToken, reader)
 {
     if (reader == null)
     {
         throw new ArgumentNullException("reader");
     }
     if (expectedTokens == null)
     {
         throw new ArgumentNullException("expectedTokens");
     }
 }
Exemplo n.º 7
0
        public static object ReadValue(this IJsonReader reader, Type valueType, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            // try guess type
            if (valueType == typeof(object) && reader.Token != JsonToken.BeginObject)
            {
                valueType = reader.Value.ProbableType;
            }

            if (valueType != null && valueType.IsInstantiationOf(typeof(Nullable <>)))
            {
                if (reader.Token == JsonToken.Null)
                {
                    return(null);
                }

                valueType = valueType.GetGenericArguments()[0];
            }

            if (valueType == null)
            {
                valueType = typeof(object);
            }

            if (reader.Token == JsonToken.Null)
            {
                if (valueType.IsValueType)
                {
                    reader.ThrowUnexpectedToken(JsonToken.BeginArray, JsonToken.BeginObject, JsonToken.StringLiteral, JsonToken.Number, JsonToken.Boolean, JsonToken.DateTime);
                }
                return(null);
            }

            var serializer = reader.Context.GetSerializerForType(valueType);
            var value      = serializer.Deserialize(reader);

            if (!reader.IsEndOfStream() && advance)
            {
                reader.NextToken();
            }

            return(value);
        }
Exemplo n.º 8
0
        public static void ReadNull(this IJsonReader reader, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            if (reader.Token != JsonToken.Null)
            {
                throw new UnexpectedToken(reader, JsonToken.Null);
            }

            if (!reader.IsEndOfStream() && advance)
            {
                reader.NextToken();
            }
        }
Exemplo n.º 9
0
        public override object Deserialize(IJsonReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            if (reader.Token == JsonToken.Null)
            {
                return(null);
            }

            var container = new ArrayList();

            if (reader.Token != JsonToken.BeginArray)
            {
                throw JsonSerializationException.UnexpectedToken(reader, JsonToken.BeginArray);
            }

            reader.Context.Hierarchy.Push(container);
            while (reader.NextToken() && reader.Token != JsonToken.EndOfArray)
            {
                var value = reader.ReadValue(this.elementType, false);
                container.Add(value);
            }
            reader.Context.Hierarchy.Pop();

            if (reader.IsEndOfStream())
            {
                throw JsonSerializationException.UnexpectedToken(reader, JsonToken.EndOfArray);
            }

            if (this.instantiatedArrayType == typeof(ArrayList))
            {
                return(container);
            }
            else if (this.instantiatedArrayType.IsArray)
            {
                return(container.ToArray(this.elementType));
            }
            else
            {
                return(Activator.CreateInstance(this.instantiatedArrayType, container.ToArray(this.elementType)));
            }
        }
Exemplo n.º 10
0
        public static void ReadObjectBegin(this IJsonReader reader, bool nextToken = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }


            if (reader.Token != JsonToken.BeginObject)
            {
                throw JsonSerializationException.UnexpectedToken(reader, JsonToken.BeginObject);
            }
            if (reader.IsEndOfStream())
            {
                throw JsonSerializationException.UnexpectedToken(reader, JsonToken.EndOfObject);
            }

            if (nextToken)
            {
                reader.NextToken();
            }
        }
Exemplo n.º 11
0
        public static void ReadArrayBegin(this IJsonReader reader, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }


            if (reader.Token != JsonToken.BeginArray)
            {
                throw new UnexpectedToken(reader, JsonToken.BeginArray);
            }
            if (reader.IsEndOfStream())
            {
                throw new UnexpectedToken(reader, JsonToken.EndOfArray);
            }

            if (advance)
            {
                reader.NextToken();
            }
        }
Exemplo n.º 12
0
        public static string ReadMember(this IJsonReader reader, bool advance = true)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }


            if (reader.Token != JsonToken.Member)
            {
                throw new UnexpectedToken(reader, JsonToken.Member);
            }

            var memberName = (string)reader.RawValue;

            if (!reader.IsEndOfStream() && advance)
            {
                reader.NextToken();
            }

            return(memberName);
        }