private static object FillObject(JsonTokens tokens, object target) { Type t = target.GetType(); string name; while (tokens.Current != JsonTokens.OBJECT_END) { name = tokens.PopWordFinishedWith(':'); if (_cache.TypeHasThisMember(t, name)) { _cache.SetValueInThisType(t, target, name, Parse(tokens, _cache.GetTypeOfMember(t, name))); } else { throw new ArgumentException("Wrong Field/Property passed on argument"); } if (tokens.Current == JsonTokens.COMMA) { tokens.MoveNext(); } if (tokens.Current == JsonTokens.ARRAY_END) { throw new InvalidOperationException("Wrong Array End character detected"); } } tokens.Pop(JsonTokens.OBJECT_END); // Discard bracket } OBJECT_END return(target); }
private static object ParseArray(JsonTokens tokens, Type klass) { ArrayList list = new ArrayList(); tokens.Pop(JsonTokens.ARRAY_OPEN); // Discard square brackets [ ARRAY_OPEN while (tokens.Current != JsonTokens.ARRAY_END) { if (tokens.Current == JsonTokens.OBJECT_OPEN) { list.Add(Parse(tokens, klass)); } if (tokens.Current == JsonTokens.COMMA) { tokens.MoveNext(); } if (tokens.Current == ' ') { tokens.Trim(); } } tokens.Pop(JsonTokens.ARRAY_END); // Discard square bracket ] ARRAY_END return(list.ToArray(klass)); }