AngularJS datatable always showing No matching records found

I've tried almost everything for past 5 days in my angularJS datatable Here are the code snippets and outputs,

HTML

 <table datatable="" dt-options="dtOptions" dt-columns="dtColumns" class="table small">
 <thead>
     //Tried including tr, th too and without them too
  </thead>
  <tbody>
  </tbody>
 </table>

In angularJS

 //Dt options
        $scope.dtOptions = DTOptionsBuilder.newOptions().withOption('ajax', {
            dataSrc: function (json) {
                console.log(json);
                return json;
            },
            url: "/allserviceprovider",
            type: "POST"

        })
            .withOption('processing', true) //for show progress bar
            .withOption('serverSide', true) // for server side processing
            .withPaginationType('full_numbers') // for get full pagination options // first / last / prev / next and page numbers
            .withDisplayLength(10) // Page size
            .withOption('order', []) // for default sorting column // here 0 means first column
            //
            // .withOption('bJQueryUI', true);

        $scope.dtColumns = [
            DTColumnBuilder.newColumn('merchantName').withTitle('Merchant Name'),
            DTColumnBuilder.newColumn('serviceProviderName').withTitle('Service Provider')
        ];

Output from Server side

{draw: 1, recordsTotal: 2, recordsFiltered: 2, data: Array(2)}
data: Array(2)
   0: (2) ["abc provider", "some name"]
   1: (2) ["Operator Merchant", "operator_unique"]
length: 2
draw: 1
recordsFiltered: 2
recordsTotal: 2

Copied from chrome debugger (Not a RAW JSON)

I'm certain that this data is correct enough for being rendered by datatable, I've tried returning array of array and array of objects too in data But still no luck. what's might be going wrong? Please help me, I'm stocked for 5 days on this.