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 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) { /*********** TODO *************/ break; } tokens.Pop(JsonTokens.ARRAY_END); // Discard square bracket ] ARRAY_END return(list.ToArray(klass)); }
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 ParseObject(JsonTokens tokens, Type klass) { tokens.Pop(JsonTokens.OBJECT_OPEN); // Discard bracket { OBJECT_OPEN object target = Activator.CreateInstance(klass); return(FillObject(tokens, target)); }
private static object FillObject(JsonTokens tokens, object target) { while (tokens.Current != JsonTokens.OBJECT_END) { /*********** TODO *************/ break; } 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)); }
private static object ParseObject(JsonTokens tokens, Type klass) { if (!_cache.ContainsType(klass)) { PropertyInfo [] p = klass.GetProperties(); FieldInfo[] f = klass.GetFields(); MemberInfo[] m = new MemberInfo[p.Length + f.Length]; Array.Copy(p, m, p.Length); Array.Copy(f, 0, m, p.Length, f.Length); _cache.CheckAndAddType(klass, m); } tokens.Pop(JsonTokens.OBJECT_OPEN); // Discard bracket { OBJECT_OPEN object target = Activator.CreateInstance(klass); return(FillObject(tokens, target)); }
private static string ParseString(JsonTokens tokens) { tokens.Pop(JsonTokens.DOUBLE_QUOTES); // Discard double quotes " return(tokens.PopWordFinishedWith(JsonTokens.DOUBLE_QUOTES)); }