Вложенный JSON с MVC3 - PullRequest
2 голосов
/ 21 июля 2011

Я искал вокруг и пока не нашел решения.Если у меня есть JSON с вложенными объектами, который я публикую на своем контроллере, как я могу заставить его правильно связываться с объектом.Мой код прекрасно работает для любых объектов, которые не имеют вложенности.Решение, кто-нибудь?

var object = { "RandomString": "ASDFASDF" };
var nestedobject = { "AnotherString": "ASDFASDF", "Object": object };

$.ajax({
  type: 'POST',
  url: 'Controller/Method',
  data: nestedobject,
  dataType: 'json',
  success: callback
});

1 Ответ

1 голос
/ 21 июля 2011

Это должно быть прекрасно с десериализацией вложенных объектов, если сервер знает о типах ...

Если вы используете JsonValueProviderFactory для MVC3, вы должны убедиться, что вы JSONify передаваете данные и используете соответствующий тип контента, как показано ниже ...

Поведение по умолчанию для jQuery при передаче объекта в data для вызова $.ajax заключается в создании KVP для объекта, который, вероятно, больше подходит для стандартной отправки формы или значений строки запроса, поэтому вам необходимо JSON.stringify данные.

var o = { "RandomString": "ASDFASDF" };
var nestedobject = { "AnotherString": "ASDFASDF", "SomeObject": o };

$.ajax({
  type: 'POST',
  url: 'Controller/Method',
  data: JSON.stringify(nestedobject),
  dataType: 'json',
  contentType: 'application/json; charset=utf-8',
  success: callback
});

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

public ActionResult Method(string AnotherString, SomeType SomeObject) { /* ... */ }

public class SomeType { 
    public string RandomString {get;set;}
}

Решение

Я хотел поместить это здесь для полноты картины. Я использовал код, который он мне дал, но главная проблема в том, что мне нужно было пометить объект SerializableAttribute. Спасибо!

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