Vous pouvez simplement écrire une classe wrapper comme ceci.
public class ContainerClass {
public List<students> Students {get;set;}
}
et sérialisez-le.
Donc, ce que vous finiriez par faire dans votre méthode ListJson est :
var studentDetails = new ContainerClass();
studentDetails.Students = ConvertDataTable<students>(ds.Tables[0]);
JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(studentDetails);
Cela a-t-il un sens ?