Пример #1
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);
        }