private Expression makeFieldReader(FieldFunctionInfo ffi) { if (ffi.DeserializerFactory != null) { var mi = BuildUtils.CustomFieldMi.MakeGenericMethod(ffi.ResultType); var customDeserializer = Expression.Constant(ffi.DeserializerFactory.CreateInstance(ffi.ResultType)); return(Expression.Call(null, mi, _pDeserializer, customDeserializer, Expression.Constant(ffi.Name), _pCfgNode, Expression.Constant(ffi.Required))); } if (!SimpleTypes.Converter.IsPrimitive(ffi.ResultType)) { if (ffi.ResultType.IsArray) { var itemType = ffi.ResultType.GetElementType(); var mi = BuildUtils.ToArrayMi.MakeGenericMethod(itemType); return(Expression.Call(null, mi, _pDeserializer, Expression.Constant(ffi.Name), _pCfgNode)); } if (BuildUtils.IsCollection(ffi.ResultType)) { var itemType = ffi.ResultType.GetGenericArguments()[0]; var mi = BuildUtils.ToListMi.MakeGenericMethod(itemType); return(Expression.Call(null, mi, _pDeserializer, Expression.Constant(ffi.Name), _pCfgNode)); } } { var mi = BuildUtils.ReadFieldMi.MakeGenericMethod(ffi.ResultType); return(Expression.Call(null, mi, _pDeserializer, Expression.Constant(ffi.Name), _pCfgNode, Expression.Constant(ffi.Required))); } }
private Expression makeFieldReader(FieldFunctionInfo ffi) { if (ffi.DeserializerFactory != null) { var mi = BuildUtils.CustomFieldMi.MakeGenericMethod(ffi.ResultType); var customDeserializer = Expression.Constant(ffi.DeserializerFactory.CreateInstance(ffi.ResultType)); return Expression.Call(null, mi, _pDeserializer, customDeserializer, Expression.Constant(ffi.Name), _pCfgNode, Expression.Constant(ffi.Required)); } if (!SimpleTypes.Converter.IsPrimitive(ffi.ResultType)) { if (ffi.ResultType.IsArray) { var itemType = ffi.ResultType.GetElementType(); var mi = BuildUtils.ToArrayMi.MakeGenericMethod(itemType); return Expression.Call(null, mi, _pDeserializer, Expression.Constant(ffi.Name), _pCfgNode); } if (BuildUtils.IsCollection(ffi.ResultType)) { var itemType = ffi.ResultType.GetGenericArguments()[0]; var mi = BuildUtils.ToListMi.MakeGenericMethod(itemType); return Expression.Call(null, mi, _pDeserializer, Expression.Constant(ffi.Name), _pCfgNode); } } { var mi = BuildUtils.ReadFieldMi.MakeGenericMethod(ffi.ResultType); return Expression.Call(null, mi, _pDeserializer, Expression.Constant(ffi.Name), _pCfgNode, Expression.Constant(ffi.Required)); } }