Выравнивание сложного объекта JSON для привязки MVC - PullRequest
5 голосов
/ 06 февраля 2010

Мой контроллер возвращает граф объектов в представление в формате json, как это

return Json(customer);

На виде мой объект json выглядит следующим образом

{
    Name: 'Joe',
    Budget: { Amount: 500, Spend: 100 }
}

Который правильно отображается на мой объект клиента:

public class Customer 
{
    public string Name {get;set;}
    public Budget Budget{get;set;} 
}

public class Budget  
{
    public decimal Amount{get;set;}    
    public decimal Spend{get;set;} 
}

Я хочу передать тот же самый объект json другому методу на контроллере с такой подписью:

public ActionResult Method(Customer customer)

Когда я заполняю имя этого клиента, но не класс Budget, я понимаю почему, потому что связыватель моделей ожидает этого: {Name: 'Joe', 'Budget.Amount': 500, 'Budget.Spend': 100 }

Итак, у меня есть варианты: 1. Я могу вернуть объект json в нужном формате, но не знаю как, потому что вы не можете сделать это:

return Json(new { Budget.Amount= 500})
  1. Я могу сгладить объект json на стороне клиента. Есть ли плагины или методы для этого?

Ответы [ 3 ]

5 голосов
/ 06 февраля 2010

Вот функция, которая преобразует объект в плоский хеш

function flatten(json){
    var nj = {},
        walk = function(j){
            var jp;
            for(var prop in j){
                jp = j[prop];
                if(jp.toString() === "[object Object]"){
                    walk(jp);
                }else{
                    nj[prop] = jp;
                }
            }
        };
    walk(json);
    return nj;
}
1 голос
/ 28 ноября 2010
0 голосов
/ 06 февраля 2010

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

публичный метод ActionResult (клиент клиента, [Bind (Prefix = "Budget")] бюджет бюджета)

, чтобы это произошло, вы должны сгладить данные JSON (перед отправкой на контроллер) следующим образом:

Как передать сложный тип с помощью json в контроллер ASP.NET MVC

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