Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }