MVC: как вернуть строку в формате JSON

Пытаясь сделать процесс отчета о ходе работы немного более надежным и отделить его от запроса/ответа, я выполняю обработку в службе Windows и сохраняю предполагаемый ответ в файл. Когда клиент начинает запрашивать обновления, предполагается, что контроллер возвращает содержимое файла, каким бы оно ни было, в виде строки JSON.

Содержимое файла предварительно сериализуется в JSON. Это делается для того, чтобы ничто не мешало ответу. Для получения ответа не требуется никакой обработки (за исключением чтения содержимого файла в строку и его возврата).

Сначала я думал, что это будет довольно просто, но оказалось, что это не так.

В настоящее время мой метод контроллера выглядит следующим образом:

Контроллер

Обновлено

[HttpPost]
public JsonResult UpdateBatchSearchMembers()
{
    string path = Properties.Settings.Default.ResponsePath;
    string returntext;
    if (!System.IO.File.Exists(path))
        returntext = Properties.Settings.Default.EmptyBatchSearchUpdate;
    else
        returntext = System.IO.File.ReadAllText(path);

    return this.Json(returntext);
}

И Fiddler возвращает это как необработанный ответ

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 19 Mar 2012 20:30:05 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Cache-Control: private
Content-Type: application/json; charset=utf-8
Content-Length: 81
Connection: Close

"{\"StopPolling\":false,\"BatchSearchProgressReports\":[],\"MemberStatuses\":[]}"

AJAX

Обновлено

Следующее, вероятно, будет изменено позже, но на данный момент это работало, когда я создавал класс ответа и возвращал его как JSON, как обычный человек.

this.CheckForUpdate = function () {
var parent = this;

if (this.BatchSearchId != null && WorkflowState.SelectedSearchList != "") {
    showAjaxLoader = false;
    if (progressPending != true) {
        progressPending = true;
        $.ajax({
            url: WorkflowState.UpdateBatchLink + "?SearchListID=" + WorkflowState.SelectedSearchList,
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            cache: false,
            success: function (data) {
                for (var i = 0; i < data.MemberStatuses.length; i++) {
                    var response = data.MemberStatuses[i];
                    parent.UpdateCellStatus(response);
                }
                if (data.StopPolling = true) {
                    parent.StopPullingForUpdates();
                }
                showAjaxLoader = true;
            }
        });
        progressPending = false;
    }
}
63
задан CodeWarrior 19 March 2012 в 21:08
поделиться