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 FillObject(JsonTokens tokens, object target) { while (tokens.Current != JsonTokens.OBJECT_END) { String key; try { key = tokens.PopWordFinishedWith(JsonTokens.COLON); } catch (Exception e) { throw new InvalidOperationException(); } foreach (var m in TargetProperties) { if (m.Name.Equals(key)) { m.SetValue(target, Parse(tokens, m.PropertyType)); break; } } if (tokens.Current == JsonTokens.COMMA) { tokens.Pop(JsonTokens.COMMA); } } tokens.Pop(JsonTokens.OBJECT_END); // Discard bracket } OBJECT_END return(target); }
private static string ParseString(JsonTokens tokens) { tokens.Pop(JsonTokens.DOUBLE_QUOTES); // Discard double quotes " return(tokens.PopWordFinishedWith(JsonTokens.DOUBLE_QUOTES)); }