예제 #1
0
        public static Expression <Action <IEnumerable, TextWriter> > CreateExpression(Type type, string separator = ",")
        {
            var members    = LocalMemberInfo.FindAll(type).ToList();
            var expression = BuildFlattener.CreateWriterExpression(type, members, ',');

            return(expression);
        }
예제 #2
0
        public static Expression <Action <IEnumerable, TextWriter> > CreateWriterExpression(Type type, IList <IMemberInfo> members, char separator)
        {
            var builder = new BuildFlattener
            {
                _Type      = type,
                _Members   = members,
                _Separator = separator,
            };

            return((Expression <Action <IEnumerable, TextWriter> >)builder.CreateWriterDelegate());
        }
예제 #3
0
        public Flattener(Type type, IList <IMemberInfo> members)
        {
            _Type    = type;
            _Flatten = BuildFlattener.Create(type, members);             // BuildFlattener has its own special handling for empty member lists

            if (members == null || members.Count == 0)
            {
                members = new List <IMemberInfo> {
                    new FakeMemberInfo(type)
                };
            }

            _Members = members;
        }
예제 #4
0
        public static Expression <Func <object, IList <object> > > CreateExpression(Type type, IList <IMemberInfo> members)
        {
            if (IsNullOrEmpty(members))
            {
                throw new NotSupportedException("Will not build expression for type with no members.");
            }

            var builder = new BuildFlattener
            {
                _Type    = type,
                _Members = members,
            };

            return(builder.CreateDelegate());
        }
예제 #5
0
        public static void Serialize(Type type, TextWriter destination, IEnumerable items)
        {
            Action <IEnumerable, TextWriter> writer;

            lock (_Delegates)
            {
                if (!_Delegates.TryGetValue(type, out writer))
                {
                    var members    = LocalMemberInfo.FindAll(type).ToList();
                    var expression = BuildFlattener.CreateWriterExpression(type, members, ',');
                    writer = expression.Compile();
                    _Delegates.Add(type, writer);
                }
            }

            writer.Invoke(items, destination);
        }
예제 #6
0
        public static void Serialize <TItem, TColumn>(TextWriter destination, IEnumerable <TItem> items, KeyValuePair <string, TColumn>[] columns)
        {
            Action <IEnumerable, Array, TextWriter> writer;
            var pair = new TypePair(typeof(TItem), typeof(TColumn));

            lock (_Delegates)
            {
                if (!_DelegatesDynamic.TryGetValue(pair, out writer))
                {
                    var members    = LocalMemberInfo.FindAll(typeof(TItem)).ToList();
                    var expression = BuildFlattener.CreateWriterExpression(typeof(TItem), typeof(TColumn), members, ',');
                    writer = expression.Compile();
                    _DelegatesDynamic.Add(pair, writer);
                }
            }

            writer.Invoke(items, columns, destination);
        }