Exemple #1
0
        object ReadList()
        {
            object ret = ReadObject();

            //Type t = ret.GetType().GetInterfaces().Where(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IList<>)).First();
            Type t = ret.GetType();
            DynamicMethodDelegate dmd = DynamicMethodDelegateFactory.CreateDelegate(t.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public, null, t.GetGenericArguments(), null));

            TypeMarker elemt = (TypeMarker)reader.ReadByte();
            int        len   = (int)ReadVInt();

            if (TypeMarkerUtil.IsFinal(elemt))
            {
                for (int i = 0; i < len; i++)
                {
                    dmd(ret, new[] { ReadValue(elemt) });
                }
            }
            else
            {
                for (int i = 0; i < len; i++)
                {
                    dmd(ret, new[] { ReadValue() });
                }
            }
            return(ret);
        }
Exemple #2
0
        object ReadDictionary()
        {
            object ret = ReadObject();

            Type t = ret.GetType().GetInterfaces().Where(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IDictionary <,>)).First();

            DynamicMethodDelegate dmd = DynamicMethodDelegateFactory.CreateDelegate(t.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public, null, t.GetGenericArguments(), null));

            int len = (int)ReadVInt();

            object[] keys = new object[len];
            for (int i = 0; i < len; i++)
            {
                keys[i] = ReadValue();
            }
            for (int i = 0; i < len; i++)
            {
                dmd(ret, new[] { keys[i], ReadValue() });
            }
            return(ret);
        }