展平复杂的json对象以进行mvc绑定

时间:2010-02-05 21:09:23

标签: javascript asp.net-mvc json

我的控制器正在以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)

当我这样做时,客户的名字会被填充,但不会填充预算类,我理解为什么因为模型绑定器期望这样:{姓名:'Joe','Budget.Amount':500,'Budget.Spend':100 }

所以我必须选择: 1.我可以以它想要的格式返回json对象,但我不知道怎么做,因为你不能这样做:

return Json(new { Budget.Amount= 500})
  1. 我可以在客户端展平json对象。是否有插件或方法来执行此操作?

3 个答案:

答案 0 :(得分:5)

这是一个将对象转换为平面哈希的函数

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 :(得分:1)

答案 2 :(得分:0)

在我的情况下,我们通过将其他对象传递给动作URL来解决它。

公共ActionResult方法(客户客户,[Bind(前缀=“预算”)]预算预算)

为了实现这一点,您必须以下列方式展平json数据(在将其发送到控制器之前):

How to pass complex type using json to ASP.NET MVC controller