private IEnumerable<object> PopulateList(JsonReader reader/*, Type objectType*/) { while (reader.Read()) { switch (reader.TokenType) { case JsonToken.EndArray: yield break; case JsonToken.Comment: break; default: yield return GetObject (reader/*, elementType*/); break; } } throw new JsonSerializationException ("Unexpected end when deserializing array."); }
private IEnumerator<KeyValuePair<string, object>> PopulateObject(JsonReader reader/*, Type objectType*/) { reader.IncrementRecursionLevel (); while (reader.Read ()) { switch (reader.TokenType) { case JsonToken.PropertyName: string memberName = reader.Value.ToString (); if (!reader.Read ()) throw new JsonSerializationException (string.Format ("Unexpected end when setting {0}'s value.", memberName)); yield return new KeyValuePair<string, object> (memberName, GetObject (reader)); break; case JsonToken.EndObject: reader.DecrementRecursionLevel (); yield break; default: throw new JsonSerializationException ("Unexpected token when deserializing object: " + reader.TokenType); } } throw new JsonSerializationException ("Unexpected end when deserializing object."); }
/// <summary> /// Deserializes the Json structure contained by the specified <see cref="JsonReader"/> /// into an instance of the specified type. /// </summary> /// <param name="reader">The type of object to create.</param> /// <param name="objectType">The <see cref="Type"/> of object being deserialized.</param> /// <returns>The instance of <paramref name="objectType"/> being deserialized.</returns> object Deserialize(JsonReader reader) { if (!reader.Read ()) return null; return GetObject (reader); }