将具有对象列表的json绑定到模型

时间:2014-02-01 11:22:24

标签: c# asp.net-mvc json model-binding modelbinders

我想绑定这个json:

{

        "DataPeriodId": 1,
        "MarketerId": 2,
        "MarketerTitle": "mehrdad",
        "CreditValues": [
            {
                "Title": "twelve",
                "CreditTypeId": 1,
                "Value": 2500000,
                "CreditId": 3,
                "HasMax": true
            },
            {
                "Title": "test",
                "CreditTypeId": 2,
                "Value": "",
                "CreditId": "",
                "HasMax": true
            },
            {
                "Title": "pouya",
                "CreditTypeId": 3,
                "Value": 1564564,
                "CreditId": 7,
                "HasMax": false
            },
            {
                "Title": "jafar",
                "CreditTypeId": 4,
                "Value": 0,
                "CreditId": 9,
                "HasMax": false
            },
            {
                "Title": "saeed",
                "CreditTypeId": 5,
                "Value": 0,
                "CreditId": 10,
                "HasMax": false
            }
        ]

}

对此对象:

public class MarketerCredit
{
    public int DataPeriodId;
    public int MarketerId;
    public string MarketerTitle;
    public List<CreditValue> CreditValues;
}
public class CreditValue
{
    public int CreditId;
    public int CreditTypeId;
    public decimal? Value;
    public bool HasMax;
}

在mvc.net。

但是当将json传递给action时,所有成员都为null。 这是我的行动:

   public void EditMarketerCredit(MarketerCredit marketerCredit)
        {


        }   

所以我写这个:

public void EditMarketerCredit(List<CreditValue> CreditValues,int DataPeriodId,int MarketerId,string MarketerTitle)

当成员分开时,一切都还可以。 如何将json绑定到模型?

3 个答案:

答案 0 :(得分:1)

根据你的json,你需要一个封装MarketerCredit

的根对象
public class RootObject
{
    public MarketerCredit MarketerCredit { set; get; }
}

BTW:你的json包含一行"CreditId": "",,所以CreditId的类型应该是 string

答案 1 :(得分:1)

您需要实现自己的自定义模型绑定器,然后在应用程序启动时注册它。这是一个walkthrough,解释了如何实现这一目标。

但是,如果你想避免自定义MVC管道,你需要创建一个新的类/模型来公开类型为marketerCredit的{​​{1}}属性,你可以随意命名这个模型

MarketerCredit

然后像这样修改你的动作方法......

public class MyModel
{
    public MarketerCredit marketerCredit{get;set;}
}

答案 2 :(得分:0)

您应该为属性添加get和set:

public int DataPeriodId{get;set}

你刚刚添加了写

public int DataPeriodId

Mvc无法绑定。