Json DeserializeObject Ошибка возврата - PullRequest
0 голосов
/ 14 марта 2012

У меня есть функция Javascript, которая называется sendData.

var sendData = function (data) {
        alert("The following data are sending to the server");
        var dataToSend = JSON.stringify(data);
        alert(dataToSend);
        $.ajax({
            type: "POST",
            url: "Submit",
            dataType: "json",
            data: dataToSend,
            contentType: "application/json; charset=utf-8",
            success: function (response, textStatus, jqXHR) {
                alert("success");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert("fail");
            }
        });
    };

. Используя эту функцию js, я вижу значение dataToSend

[{"Seminar_Code":"CMP04","Speaker":"1","Tag":"1","DateAndTime":""},  {"Seminar_Code":"CMP04","Speaker":"2","Tag":"2","DateAndTime":""},{"Seminar_Code":"CMP04","Speaker":"3","Tag":"3","DateAndTime":""}]

Затем я проверилиспользуя http://jsonlint.com/. Это действительно.

Затем я использую приведенный ниже код на уровне контроллера.

    [AcceptVerbs(HttpVerbs.Post)]
    //[JsonFilter(Parameter = "seminar_detail", JsonDataType = typeof(Seminar_Detail))]
    public ActionResult Submit(JsonResult Jresult)
    {
        //var ttt = JsonConvert.DeserializeObject(Request["jsonString"], typeof(List<Seminar_Detail>));
        //var result = (new JsonSerializer()).Deserialize<List<Seminar_Detail>>(seminar_detail);
        //var result = JsonConvert.DeserializeObject<List<Seminar_Detail>>(seminar_detail.ToString());

        var result = JsonConvert.DeserializeObject<List<Seminar_Detail>>(Jresult.ToString());
        return View();
    }

Затем я получаю эту ошибку.

JsonReaderException was unhandled by user code
Unexpected character encountered while parsing value: S. Line 0, position 0.

Используя Immediate window from vs 2010 IDE --- > Jresult.Data , я получаю нулевое значение.

Результат немедленного окна

Jresult.ToString()
"System.Web.Mvc.JsonResult"
Jresult.Data.ToString()
'Jresult.Data' is null
Jresult.Data
null

Я использую Newtonsoft.Json and Asp.net MVC 4.Пожалуйста, дайте мне знать, как решить эту ошибку.

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Создать модель вида:

public class Seminar
{
    public string Seminar_Code { get; set; }
    public string Speaker { get; set; }
    public string Tag { get; set; }
    public string DateAndTime { get; set; }
}

и затем действие вашего контроллера примет список этой модели представления в качестве параметра:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Submit(IEnumerable<Seminar> seminars)
{
    ... don't need to use any JSON serializers here. 

    return View();
}

Это будет работать в ASP.NET MVC 3.

Если вы используете более старую версию, вы можете создать пользовательский JsonValueProviderFactory, как описано в следующей записи в блоге , и при этом сохранить модель в своем действии.

Но ни в коем случае не помещайте код инфраструктуры сериализации в свои контроллеры. Контроллер не несет ответственности за сериализацию / десериализацию объектов.

0 голосов
/ 14 марта 2012

сделайте ваш аргумент контроллера типа string, а затем используйте Newtonsoft.Json для его десериализации.

JSONResult имеет тип ActionResult и не должен использоваться в качестве аргумента действия.

Вы также впервые попытались позволить Model Binder десериализовать его для вас, например

в тебе ajax call попробуй сделать,

data: { 'result': dataToSend } 

и ваш контроллер как

public ActionResult Submit(IEnumerable<Seminar_Detail> result)
   {
     ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...