Esempio n. 1
0
 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);
 }
Esempio 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)
            {
                /*********** TODO *************/
                break;
            }
            tokens.Pop(JsonTokens.ARRAY_END); // Discard square bracket ] ARRAY_END
            return(list.ToArray(klass));
        }
Esempio n. 3
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);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
 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);
 }
Esempio n. 6
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));
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
 private static string ParseString(JsonTokens tokens)
 {
     tokens.Pop(JsonTokens.DOUBLE_QUOTES); // Discard double quotes "
     return(tokens.PopWordFinishedWith(JsonTokens.DOUBLE_QUOTES));
 }