/// <summary> /// Creates a <see cref="RavenJToken"/> from a <see cref="JsonReader"/>. /// </summary> /// <param name="reader">An <see cref="JsonReader"/> positioned at the token to read into this <see cref="RavenJToken"/>.</param> /// <returns> /// An <see cref="RavenJToken"/> that contains the token and its descendant tokens /// that were read from the reader. The runtime type of the token is determined /// by the token type of the first token encountered in the reader. /// </returns> public static RavenJToken ReadFrom(JsonReader reader) { if (reader.TokenType == JsonToken.None) { if (!reader.Read()) { throw new Exception("Error reading RavenJToken from JsonReader."); } } switch (reader.TokenType) { case JsonToken.StartObject: return(RavenJObject.Load(reader)); case JsonToken.StartArray: return(RavenJArray.Load(reader)); case JsonToken.String: case JsonToken.Integer: case JsonToken.Float: case JsonToken.Date: case JsonToken.Boolean: case JsonToken.Bytes: case JsonToken.Null: case JsonToken.Undefined: return(new RavenJValue(reader.Value)); } throw new Exception("Error reading RavenJToken from JsonReader. Unexpected token: {0}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); }
public new static RavenJArray Load(JsonReader reader) { ValidationUtils.ArgumentNotNull(reader, "reader"); if (reader.TokenType == JsonToken.None) { if (!reader.Read()) { throw new Exception("Error reading RavenJArray from JsonReader."); } } if (reader.TokenType != JsonToken.StartArray) { throw new Exception("Error reading RavenJArray from JsonReader. Current JsonReader item is not an array: {0}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } if (reader.Read() == false) { throw new Exception("Unexpected end of json array"); } var ar = new RavenJArray(); RavenJToken val = null; do { switch (reader.TokenType) { case JsonToken.Comment: // ignore comments break; case JsonToken.EndArray: return(ar); case JsonToken.StartObject: val = RavenJObject.Load(reader); ar.Items.Add(val); break; case JsonToken.StartArray: val = RavenJArray.Load(reader); ar.Items.Add(val); break; default: val = RavenJValue.Load(reader); ar.Items.Add(val); break; } } while (reader.Read()); throw new Exception("Error reading RavenJArray from JsonReader."); }
/// <summary> /// Loads an <see cref="RavenJObject"/> from a <see cref="JsonReader"/>. /// </summary> /// <param name="reader">A <see cref="JsonReader"/> that will be read for the content of the <see cref="RavenJObject"/>.</param> /// <returns>A <see cref="RavenJObject"/> that contains the JSON that was read from the specified <see cref="JsonReader"/>.</returns> public new static RavenJObject Load(JsonReader reader) { ValidationUtils.ArgumentNotNull(reader, "reader"); if (reader.TokenType == JsonToken.None) { if (!reader.Read()) { throw new Exception("Error reading RavenJObject from JsonReader."); } } if (reader.TokenType != JsonToken.StartObject) { throw new Exception( "Error reading RavenJObject from JsonReader. Current JsonReader item is not an object: {0}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } if (reader.Read() == false) { throw new Exception("Unexpected end of json object"); } string propName = null; var o = new RavenJObject(); do { switch (reader.TokenType) { case JsonToken.Comment: // ignore comments break; case JsonToken.PropertyName: propName = reader.Value.ToString(); break; case JsonToken.EndObject: return(o); case JsonToken.StartObject: if (!string.IsNullOrEmpty(propName)) { var val = RavenJObject.Load(reader); o[propName] = val; // TODO: Assert when o.Properties.ContainsKey and its value != val propName = null; } else { throw new InvalidOperationException("The JsonReader should not be on a token of type {0}." .FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } break; case JsonToken.StartArray: if (!string.IsNullOrEmpty(propName)) { var val = RavenJArray.Load(reader); o[propName] = val; // TODO: Assert when o.Properties.ContainsKey and its value != val propName = null; } else { throw new InvalidOperationException("The JsonReader should not be on a token of type {0}." .FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } break; default: if (!string.IsNullOrEmpty(propName)) { var val = RavenJValue.Load(reader); o[propName] = val; // TODO: Assert when o.Properties.ContainsKey and its value != val propName = null; } else { throw new InvalidOperationException("The JsonReader should not be on a token of type {0}." .FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } break; } } while (reader.Read()); throw new Exception("Error reading RavenJObject from JsonReader."); }