コード例 #1
0
        protected virtual MethodDefinitionExpression CreateSerializeRequestMethod()
        {
            var error         = FickleExpression.Variable("NSError", "error");
            var retval        = FickleExpression.Variable("NSData", "retval");
            var client        = Expression.Parameter(FickleType.Define("PKWebServiceClient"), "client");
            var requestObject = Expression.Parameter(FickleType.Define("id"), "serializeRequest");
            var parameters    = new[] { new FickleParameterInfo(FickleType.Define("NSDictionary"), "obj"), new FickleParameterInfo(FickleType.Define("NSJSONWritingOptions", false, true), "options"), new FickleParameterInfo(FickleType.Define("NSError"), "error", true) };
            var methodInfo    = new FickleMethodInfo(FickleType.Define("NSJSONSerialization"), FickleType.Define("NSData"), "dataWithJSONObject", parameters, true);
            var nsDataType    = FickleType.Define("NSData");

            var body =
                Fx.Block(error, retval)
                .If(Expression.Equal(requestObject, Expression.Constant(null, requestObject.Type)))
                .Assign(retval, Expression.New(FickleType.Define("NSData")))
                .ElseIf(Expression.TypeIs(requestObject, typeof(string)))
                .Assign(retval, FickleExpression.Call(requestObject, typeof(string), "dataUsingEncoding", Expression.Variable(typeof(int), "NSUTF8StringEncoding")))
                .ElseIf(Expression.TypeIs(requestObject, nsDataType))
                .Assign(retval, Expression.Convert(requestObject, nsDataType))
                .Else()
                .Assign(retval, Expression.Call(methodInfo, requestObject, Expression.Convert(Expression.Variable(typeof(int), "NSJSONReadingAllowFragments"), FickleType.Define("NSJSONWritingOptions", false, true)), error))
                .EndIf()
                .Return(retval)
                .EndBlock();

            return(new MethodDefinitionExpression
                   (
                       "webServiceClient",
                       new [] { client, requestObject }.ToReadOnlyCollection(),
                       retval.Type,
                       body,
                       false,
                       null
                   ));
        }