Javascript Deserialize возвращает имя класса вместо реального объекта - PullRequest
1 голос
/ 27 сентября 2011

Итак, я запускаю GetServerUpdateProgress () в контроллере из вызова $ .ajax на моей странице.Во время отладки я могу подтвердить, что переменная: myobj создается правильно и заполняется правильными данными.

Но при успехе $ .ajax я не получаю данные в формате json, вместо этого я 'получаю строку «TrackerMVC.ClassLib.UpdateAJAXProgress» - тип объектов.

В прошлом я делал это с помощью веб-службы .svc, и у меня не было проблем с получением значений объектов с использованием этого точноготот же метод.

Есть идеи?Спасибо!

метод:

public UpdateAJAXProgress GetServerUpdateProgress()
{
        string BASE_URL = "http://localhost:55094";
        string url = BASE_URL + "/Home/UpdateProgress";
        WebRequest wr = WebRequest.Create(url);
        wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user

        var myojb = new UpdateAJAXProgress();
        var response = (HttpWebResponse)wr.GetResponse();
        var reader = new StreamReader(response.GetResponseStream());
        JavaScriptSerializer js = new JavaScriptSerializer();
        var objText = reader.ReadToEnd();
        myojb = (UpdateAJAXProgress)js.Deserialize(objText, typeof(UpdateAJAXProgress));
        return myojb; // during debugging this object has the correct values in the correct format
}

класс:

public class UpdateAJAXProgress
{
    public int Completed { get; set; }
    public int Total { get; set; }
}

javascript:

$.ajax({
        type: "POST",
        async: false,
        url: '@(Url.Action("GetServerUpdateProgress","Charts"))',
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            console.log(data); // data being returned is: "TrackerMVC.ClassLib.UpdateAJAXProgress"
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(XMLHttpRequest.status);
            alert(XMLHttpRequest.responseText);
        }
});

1 Ответ

2 голосов
/ 27 сентября 2011

Вы неправильно используете MVC.

Вы должны объявить свою функцию как возвращающую ActionResult, затем return Json(myobj).

Если вы возвращаете не-1007 * из действия MVCMVC преобразует его в строку, вызывая ToString().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...