2016-10-20 62 views
1

我有一个Web应用程序,我在其中检索一些数据到自举表中,我现在要做的是使用jQuery DataTable而不是当前的,因为它有太多有用的功能。将字典列表转换为可接受的DataTable Ajax对象

目前我使用OOP方法从服务器端检索数据,其中类对象表示特定表中的数据行,并且此对象包含存储列名称和值的字典。

我现在正在做的是,我检索这些类的对象,并附加每个对象的每个字典在List<Item>,然后使用序列化对象JavaScriptSerializer这个列表,这个对象返回以下JSON格式:

[ 
    { 
    "slno":"2", 
    "status_message":"Lights still flashing", 
    "crm_services_id":"1", "subject_id":"Lights are flashing", 
    "severity_id":"5", 
    "user_id":"husain.alhamali", 
    "status_id":"1" 
    }, 
    { 
    "slno":"3", 
    "status_message":"lights working fine",  
    "crm_services_id":"2", 
    "subject_id":"Lights are flashing", 
    "severity_id":"3", 
    "user_id":"husain.alhamali", 
    "status_id":"2" 
    } 
] 

,当我试图用这个对象来填补我DataTable AJAX我有一个错误说:

JSON响应无效

我看到了一个有效的JSON反应是可以接受的DataTable这是如下的一些例子:

{ 
"data": [ 
[ 
    "Tiger Nixon", 
    "System Architect", 
    "Edinburgh", 
    "5421", 
    "2011/04/25", 
    "$320,800" 
], 
[ 
    "Garrett Winters", 
    "Accountant", 
    "Tokyo", 
    "8422", 
    "2011/07/25", 
    "$170,750" 
] 
} 

现在我的问题是,是否有任何工具或插件,可以重新格式化我JSON字符串转换成可接受的格式就像上面那样?

+1

由于DataTables(DT)不知道放置数据的位置,所以出现错误。 DT可以处理这样的对象,但有一点需要注意的是你的对象键不统一,所以你需要能够告诉DataTable如何对不存在的键作出反应。忍受,我会研究一个JSFiddle。 – annoyingmouse

回答

1

有了这个HTML:

<table id="example"></table> 

这个js将创建一个表:

var data = [{ 
    "slno": "2", 
    "status_message": "Lights still flashing", 
    "crm_services_id": "1", 
    "subject_id": "Lights are flashing", 
    "severity_id": "5", 
    "user_id": "husain.alhamali", 
    "status_id": "1" 
}, { 
    "slno": "3", 
    "status_message": "lights working fine", 
    "crm_services_id": "2", 
    "subject_id": "Lights are flashing", 
    "severity_id": "3", 
    "user_id": "husain.alhamali", 
    "status_id": "2" 
}]; 

function getColumns(){ 
    for(var i = 0; i < data.length; i++){ 
    let columnsArray = []; 
    var keys = Object.keys(data[i]); 
    for(k in Object.keys(data[i])){ 
     if(data[i].hasOwnProperty(keys[k])){ 
     columnsArray.push({ 
      "data":keys[k] 
     }); 
     } 
    } 
    return columnsArray; 
    } 
} 
$(document).ready(function() { 
    var table = $('#example').DataTable({ 
    "columns": getColumns(), 
    "data": data 
    }); 
}); 

工作example。希望有所帮助。

+0

这实际上是伟大的,jsfiddle示例完美的作品,我试图使用它在我的项目中,但我得到一些错误,我会尽力克服它,但我可以认为这是我的问题的答案 –

2

dataTable中需要在由具有Ajax响应返回JSON数据如下键 1.数据
2.绘制 3. recordsTotal 4. recordsFiltered

+0

让我知道如果你从这个 –

+0

缺少任何东西亲爱的我得到这个想法,但我的问题是如何在C#端动态地做到这一点 –

1

使用此:

var data = list.Select(u => u.GetType() 
    .GetProperties() 
    .Select(p => p.GetValue(u, null))); 

示例

public class User 
{ 
    public int userId { get; set; } 
    public string name { get; set; } 
} 

public class Programm 
{ 
    static void Main() 
    { 
     var list = new List<User>(); 

     list.Add(new User 
     { 
      userId = 1, 
      name = "name 1", 
     }); 

     list.Add(new User 
     { 
      userId = 2, 
      name = "name 2", 
     }); 

     var data = list.Select(u => u.GetType() 
         .GetProperties() 
         .Select(p => p.GetValue(u, null))); 
     Console.WriteLine(new JavaScriptSerializer().Serialize(new 
     { 
      data = data 
     })); 
    } 
} 

结果

{ 
    "data" : [ 
     ["1", "name 1"], 
     ["2", "name 2"] 
    ] 
}