[英]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})
这是一个将对象转换为平面哈希的函数
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数据(在将其发送到控制器之前):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.