繁体   English   中英

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

[英]Flattening a complex json object for mvc binding

我的控制器正在以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类,这是我理解的原因,因为Modelbinder期望这样做:{Name:'Joe','Budget.Amount':500,'Budget.Spend':100}

因此,我必须选择:1.我可以以所需的格式返回json对象,但我不知道如何,因为您不能这样做:

return Json(new { Budget.Amount= 500})
  1. 我可以在客户端上展平json对象。 是否有插件或方法可以做到这一点?

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

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;
}

就我而言,我们通过将其他对象传递给操作网址来解决了该问题。

public ActionResult方法(客户客户,[Bind(Prefix =“ Budget”)]预算预算)

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

如何使用JSON将复杂类型传递给ASP.NET MVC控制器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM