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); }
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); }
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); }
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); }
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"); } }
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); }
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(); } }
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))); } }
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(); } }
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(); } }
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); }