Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public override Expression GetDeserializerExpression(Type memberType, ParameterExpression readerExp)
 {
     return(Expression.Convert(_baseBuilder.GetDeserializerExpression(_enumBaseType, readerExp), _enumType));
 }