JSON.net serializa directamente desde oledbconnection

Actualmente tengo un controlador que toma la ruta del archivo y el nombre de la pestaña para un archivo de Excel, procesa el archivo en una tabla de datos y luego serializa la tabla en una cadena json para volver. Esto funciona hasta que trato de procesar un archivo grande, y luego obtengo una excepción de memoria insuficiente.

Estaba pensando que reduciría el uso de memoria si no cargaba todo en la tabla de datos primero, y en su lugar cargaba directamente en la cadena json. Sin embargo, no he podido encontrar ningún ejemplo de cómo hacer esto.

¿Puedo serializar directamente desde OleDbConnection en una cadena? ¿Cómo?

    public void ProcessRequest(HttpContext context)
    {
        string path = context.Request["path"];
        string tableNames = context.Request["tableNames"];

        string connectionString = string.Empty;
        if (path.EndsWith(".xls"))
        {
            connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source={0};
                Extended Properties=""Excel 8.0;HDR=YES;IMEX=1""", path);
        }
        else if (path.EndsWith(".xlsx"))
        {
            connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source={0};
                Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""", path);
        }
        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

        DbDataAdapter adapter = factory.CreateDataAdapter();
        OleDbConnection conn = new OleDbConnection(connectionString);
        conn.Open();

        DataTable tmp = new DataTable();

        DbCommand selectCommand = factory.CreateCommand();

        selectCommand.CommandText = String.Format("SELECT * FROM [{0}]", tableNames);
        selectCommand.Connection = conn;
        adapter.SelectCommand = selectCommand;


        adapter.Fill(tmp);
        string tabdata = JsonConvert.SerializeObject(tmp);
        context.Response.Write(tabdata);
    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta