Beispiel #1
0
        public object Read(Type type, IReadFormatContext <T> context)
        {
            IList list;

            int count = context.Read <int>("Count");

            if (type.IsArray)
            {
                var elementType = type.GetElementType();

                list = Array.CreateInstance(elementType, count);

                for (int i = 0; i < count; i++)
                {
                    list[i] = context.Read(elementType, PathGetter.Index(i));
                }
            }
            else
            {
                list = (IList)ReflectionUtils.New(type);

                var elementType = ReflectionUtils.GetGenericParams(type)[0];

                for (int i = 0; i < count; i++)
                {
                    list.Add(context.Read(elementType, PathGetter.Index(i)));
                }
            }

            return(list);
        }
Beispiel #2
0
        public object Read(Type type, IReadFormatContext <T> context)
        {
            if (!NewExpressions.TryGetValue(type, out var maker))
            {
                NewExpressions[type] = maker = CreateExpression(type);
            }

            var obj = maker();

            foreach (var member in GetMembers(type))
            {
                try
                {
                    object value = context.Read(member.GetTypeOrConcrete(), member.Name);

                    var setter = ReflectionUtils.MemberSetter(type, member);

                    setter(obj, value);
                }
                catch (Exception ex)
                {
                    throw new FormattingException($"Failed to set member value of object {type.Name}", ex).AppendPath(member.Name);
                }
            }

            return(obj);
        }
Beispiel #3
0
        public object Read(Type type, IReadFormatContext <TReader> context)
        {
            var obj = (ISeccsReadable <TReader>)ReflectionUtils.New(type);

            obj.Read(context.Reader);

            return(obj);
        }
Beispiel #4
0
        public object Read(Type type, IReadFormatContext <T> context)
        {
            var args      = ReflectionUtils.GetGenericParams(type);
            var keyType   = args[0];
            var valueType = args[1];

            var key   = context.Read(keyType, "Key");
            var value = context.Read(valueType, "Value");

            return(ReflectionUtils.New(type, new[] { keyType, valueType }, new[] { key, value }));
        }
Beispiel #5
0
        public object Read(Type type, IReadFormatContext <T> context)
        {
            int length = context.Read <int>("Length");

            var itemTypes = ReflectionUtils.GetGenericParams(type);
            var items     = new object[length];

            for (int i = 0; i < length; i++)
            {
                items[i] = context.Read(itemTypes[i], new PathGetter("Item{0}", i + 1));
            }

            return(ReflectionUtils.New(type, itemTypes, items));
        }
Beispiel #6
0
        public object Read(Type type, IReadFormatContext <TReader> context)
        {
            var dic = (IDictionary)ReflectionUtils.New(type);

            var genericArgs = ReflectionUtils.GetGenericParams(type);
            var keyType     = genericArgs[0];
            var valueType   = genericArgs[1];

            int count = context.Read <int>("Count");

            for (int i = 0; i < count; i++)
            {
                var key = context.Read(keyType, new PathGetter("[{0}].Key", i));
                dic[key] = context.Read(valueType, new PathGetter("[{0}].Value", i));
            }

            return(dic);
        }
 public static T Read <T>(this IReadFormatContext context, string path = "<>", bool nullCheck = true)
 {
     return((T)(context.Read(typeof(T), path, nullCheck) ?? default(T)));
 }
 public static object Read(this IReadFormatContext context, Type type, string path = "<>", bool nullCheck = true)
 => context.Read(type, new PathGetter(path, null), nullCheck);
Beispiel #9
0
        public object Read(Type type, IReadFormatContext <T> context)
        {
            string typeName = context.Read <string>(TypeNamePath);

            return(ParseType(typeName));
        }
Beispiel #10
0
 public object Read(Type type, IReadFormatContext <T> context)
 {
     return(new string(context.Read <char[]>("CharArray")));
 }
Beispiel #11
0
        public object Read(Type type, IReadFormatContext <T> context)
        {
            var guidBytes = context.Read <byte[]>(BytesPath);

            return(new Guid(guidBytes));
        }
Beispiel #12
0
 public override T Read(IReadFormatContext <TReader> context) => Reader(context);
Beispiel #13
0
 public abstract T Read(IReadFormatContext <TReader> context);
Beispiel #14
0
 object IReadFormat <TReader> .Read(Type type, IReadFormatContext <TReader> context) => Read(context);
Beispiel #15
0
 public object Read(Type type, IReadFormatContext <TReader> context)
 {
     return(ReaderMethods[type](context.Reader));
 }