public override Expression GetDeserializerExpression(Type memberType, ParameterExpression readerExpression) { Debug.Assert(_innerBuilder != null, "Underlying builder can't be null for CheckNullBuilder"); if (memberType.GetTypeInfo().IsValueType) { return(_innerBuilder.GetDeserializerExpression(memberType, readerExpression)); } var defaultValExp = memberType.GetTypeInfo().IsValueType ? Expression.New(memberType) : (Expression)Expression.Constant(null, memberType); var readBool = typeof(Reader).GetTypeInfo().GetMethod("ReadBool"); var readExp = Expression.Call(readerExpression, readBool); var castedMemberExp = Expression.TypeAs(_innerBuilder.GetDeserializerExpression(memberType, readerExpression), memberType); var conditionalExp = Expression.Condition( Expression.Equal(readExp, Expression.Constant(true, typeof(bool))), castedMemberExp, defaultValExp); return(conditionalExp); }
public override Expression GetDeserializerExpression(Type memberType, ParameterExpression readerExp) { return(Expression.Convert(_baseBuilder.GetDeserializerExpression(_enumBaseType, readerExp), _enumType)); }