public Expression <Func <BinaryReader, IData> > CreateReadMethod() { var reader = Expression.Parameter(typeof(BinaryReader), "reader"); var dataType = typeof(Data <>).MakeGenericType(Type); return(Expression.Lambda <Func <BinaryReader, IData> >( Expression.Label(Expression.Label(dataType), Expression.New(dataType.GetConstructor(new Type[] { Type }), PersistHelper.CreateReadBody(reader, Type, MembersOrder, AllowNull))), reader )); }
public Expression <Func <BinaryReader, T> > CreateReadMethod() { var reader = Expression.Parameter(typeof(BinaryReader), "reader"); return(Expression.Lambda <Func <BinaryReader, T> >(PersistHelper.CreateReadBody(reader, Type, MembersOrder, AllowNull), reader)); }
public Expression <Action <BinaryWriter, IData> > CreateWriteMethod() { var writer = Expression.Parameter(typeof(BinaryWriter), "writer"); var idata = Expression.Parameter(typeof(IData), "idata"); var dataType = typeof(Data <>).MakeGenericType(Type); var dataValue = Expression.Variable(Type, "dataValue"); var assign = Expression.Assign(dataValue, Expression.Convert(idata, dataType).Value()); return(Expression.Lambda <Action <BinaryWriter, IData> >(Expression.Block(new ParameterExpression[] { dataValue }, assign, PersistHelper.CreateWriteBody(dataValue, writer, MembersOrder, AllowNull)), writer, idata)); }