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); }
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()); }
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; }
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()); }
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); }
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); }