public override Expression GetSerializerExpression(Type memberType, Expression getterExp, ParameterExpression writerExp)
        {
            Debug.Assert(_innerBuilder != null, "Underlying builder can't be null for CheckNullBuilder");
            if (memberType.GetTypeInfo().IsValueType)
            {
                return(_innerBuilder.GetSerializerExpression(memberType, getterExp, writerExp));
            }

            var boolType    = typeof(bool);
            var valueExp    = getterExp;
            var writeMethod = GetWriterMethod("Write", boolType);
            var bodyExp     = _innerBuilder.GetSerializerExpression(memberType, getterExp, writerExp);

            return(Expression.IfThenElse(
                       Expression.Equal(valueExp, Expression.Constant(null, memberType)),
                       Expression.Call(writerExp, writeMethod, Expression.Constant(false, boolType)),
                       Expression.Block(Expression.Call(writerExp, writeMethod, Expression.Constant(true, boolType)), bodyExp)));
        }
Exemple #2
0
 public override Expression GetSerializerExpression(Type memberType, Expression getterExp, ParameterExpression writerExp)
 {
     return(_baseBuilder.GetSerializerExpression(_enumBaseType, Expression.Convert(getterExp, _enumBaseType), writerExp));
 }