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); }
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); }
public object Read(Type type, IReadFormatContext <TReader> context) { var obj = (ISeccsReadable <TReader>)ReflectionUtils.New(type); obj.Read(context.Reader); return(obj); }
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 })); }
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)); }
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);
public object Read(Type type, IReadFormatContext <T> context) { string typeName = context.Read <string>(TypeNamePath); return(ParseType(typeName)); }
public object Read(Type type, IReadFormatContext <T> context) { return(new string(context.Read <char[]>("CharArray"))); }
public object Read(Type type, IReadFormatContext <T> context) { var guidBytes = context.Read <byte[]>(BytesPath); return(new Guid(guidBytes)); }
public override T Read(IReadFormatContext <TReader> context) => Reader(context);
public abstract T Read(IReadFormatContext <TReader> context);
object IReadFormat <TReader> .Read(Type type, IReadFormatContext <TReader> context) => Read(context);
public object Read(Type type, IReadFormatContext <TReader> context) { return(ReaderMethods[type](context.Reader)); }