public async Task ExecuteAsync(string spName, TInParams inputParams)
 {
     if (JsonWrapperAttributeExtensions.ContainsAttribute <TInParams>())
     {
         await ExecuteWithJsonInputAsync(spName, inputParams);
     }
     else
     {
         await using SqlConnection connection = new SqlConnection(_connectionString);
         await connection.ExecuteAsync(spName, inputParams, commandType : CommandType.StoredProcedure);
     }
 }
        public async Task ExecuteWithJsonInputAsync(string spName, TInParams inputParams)
        {
            /*
             *  If input is json so we must to know how to deserialize this
             *  Dapper requires input names to be set
             *  We pass this param name through  JsonWrapperAttribute
             *  And create dynamic dictionary wrapper for our object
             */
            await using SqlConnection connection = new SqlConnection(_connectionString);

            DynamicParameters parameters = new DynamicParameters(new Dictionary <string, object>
            {
                {
                    JsonWrapperAttributeExtensions.GetAttributeCustom <TInParams>().StoreProcedureJsonInputName,
                    JsonConvert.SerializeObject(inputParams)
                }
            });

            await connection.ExecuteAsync(spName, parameters, commandType : CommandType.StoredProcedure);
        }