Пример #1
0
        public static async Task <string> CreateComplexTypeClass(MethodDeclarationSyntax wcfMethod, string methodName, bool isActiveWcfMethod)
        {
            if (!isActiveWcfMethod)
            {
                return("");
            }

            var parameters = wcfMethod.ParameterList.Parameters;

            // add return type as class property if has 'out' keyword
            if (!OutKeywordGenerator.AnyHaveOutKeyword(parameters))
            {
                return("");
            }

            // create complex class
            var className = ComplexTypeNamesMapper.MapToClientComplexClassName(methodName);
            var complexClassDeclaration = await MultipleComplexTypesGenerator.CreateClassFromComplexTypes(parameters, className);

            // create return type property
            var wcfReturnType          = wcfMethod.ReturnType.NormalizeWhitespace().ToFullString();
            var returnTypePropertyCode = $"public {wcfReturnType} Result {{ get; set;}}";
            var returnTypeProperty     = (await CodeParser.ConvertToMemberDeclarations(returnTypePropertyCode)).Single();

            // add return type property to complex class
            var members = complexClassDeclaration.Members.Add(returnTypeProperty);

            complexClassDeclaration = complexClassDeclaration.WithMembers(members);
            var complexTypeClass = complexClassDeclaration?.NormalizeWhitespace().ToFullString();

            return(complexTypeClass);
        }
Пример #2
0
        private static IEnumerable <StatementSyntax> CreateEndStatements(IEnumerable <string> parameterNames, SeparatedSyntaxList <ParameterSyntax> wcfParameters,
                                                                         MethodDeclarationSyntax wcfMethod)
        {
            string CreatePropertyStatement(string variableName, bool isInitialized = false)
            {
                var initializeType = isInitialized ? "var " : "";
                var propertyName   = ComplexTypeNamesMapper.MapToComplexClassPropertyName(variableName);

                var statement = $"{initializeType}{variableName} = deserializeObject.{propertyName};";

                return(statement);
            }

            var methodName       = wcfMethod.Identifier.ValueText;
            var complexClassType = ComplexTypeNamesMapper.MapToClientComplexClassName(methodName);

            var jsonDeserializeStatements = new List <string>
            {
                $"var deserializeObject = JsonConvert.DeserializeObject<{complexClassType}>(jsonResponse, _jsonSerializerSettings);",
                CreatePropertyStatement("result", isInitialized: true),
            };

            var propertyStatements = wcfParameters
                                     .Where(parameter =>
            {
                var parameterName = parameter.Identifier.ValueText;
                var hasOutKeyword = parameterNames.Contains(parameterName);

                return(hasOutKeyword);
            })
                                     .Select(parameter =>
            {
                var parameterName = parameter.Identifier.ValueText;
                var statement     = CreatePropertyStatement(parameterName);

                return(statement);
            });

            var endStatements = jsonDeserializeStatements
                                .Union(propertyStatements)
                                .Select(statement =>
            {
                var statementDeclaration = SyntaxFactory.ParseStatement(statement);

                return(statementDeclaration);
            });

            return(endStatements);
        }