JSON.net сериализуется напрямую из oledbconnection
В настоящее время у меня есть обработчик, который берет путь к файлу и имя табуляции для файла Excel, обрабатывает файл в таблицу данных и затем сериализует таблицу в строку json для возврата. Это работает, пока я не попытаюсь обработать большой файл, а затем получаю исключение нехватки памяти.
Я думал, что это уменьшило бы использование памяти, если бы я сначала не загрузил все в таблицу данных, а вместо этого загрузил прямо в строку json. Однако я не смог найти никаких примеров того, как это сделать.
Могу ли я сериализовать непосредственно из OleDbConnection в строку? Как?
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);
}