no. non si fa con i controlli server come il datasource. Si fa con ado.net per esempio con un dataset o un datareader, e facendo una query al database.

questo è un esempio che compila e funziona

GetProdotti.ashx
codice:
    class Prodotto
    {
        public string ID { get; set; }
        public string Nome { get; set; }
    }

    public class GetProdotti : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            List<Prodotto> prodotti = new List<Prodotto>();

            DataSet dataSet = RecuperaDati();

            foreach (DataRow riga in dataSet.Tables["Prodotti"].Rows)
            {
                Prodotto prodotto = new Prodotto();
                prodotto.ID = riga["ID"].ToString();
                prodotto.Nome = riga["Nome"].ToString();

                prodotti.Add(prodotto);
            }

            string json = JsonConvert.SerializeObject(prodotti);

            context.Response.ContentType = "application/json";
            context.Response.Write(json);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        /// <summary>
        /// Funzione che recupera i dati dal tuo db e li memorizza in un dataset
        /// </summary>
        /// <returns>Il dataset con i dati della query</returns>
        private DataSet RecuperaDati()
        {
            // questo dataset lo devi recuperare dalla tua sorgente dati!
            // per esempio con  dataadapter, sqlconnection e sqlcommand.
            // qui lo riempio a mano SOLO PER SEMPLICITA 
            // e per rendere l'esempio funzionante.
            DataSet dataSet = new DataSet();

            DataTable tableProdotti = new DataTable("Prodotti");
            tableProdotti.Columns.Add("ID", typeof(string));
            tableProdotti.Columns.Add("Nome", typeof(string));
            dataSet.Tables.Add(tableProdotti);

            dataSet.Tables["Prodotti"].Rows.Add("1", "Prodotto 1");
            dataSet.Tables["Prodotti"].Rows.Add("2", "Prodotto 1");
            dataSet.Tables["Prodotti"].Rows.Add("3", "Prodotto 1");

            return dataSet;
        }
    }
se non conosci ado.net è un altro discorso... cerca su google, es (il primo che ho trovato): http://support.microsoft.com/kb/301216.