【问题标题】:Bind json that has list of object to a model将具有对象列表的 json 绑定到模型
【发布时间】:2014-02-25 04:06:03
【问题描述】:

我要绑定这个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 传递给操作时,所有成员都是空的。 这是我的行动:

   public void EditMarketerCredit(MarketerCredit marketerCredit)
        {


        }   

所以我写了这个:

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

当分离成员时,一切都好。 如何将 json 绑定到模型?

【问题讨论】:

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


    【解决方案1】:

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

    public class RootObject
    {
        public MarketerCredit MarketerCredit { set; get; }
    }
    

    顺便说一句:你的 json 包含一行 "CreditId": "",,所以 CreditId 的类型应该是 string

    【讨论】:

      【解决方案2】:

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

      但是,如果您想避免自定义 MVC 管道,则需要创建一个新的类/模型,该类/模型公开一个名为 marketerCredit 的属性,类型为 MarketerCredit,您可以随意命名此模型

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

      然后像这样修改您的操作方法...

      public void EditMarketerCredit(MyModel myModel)
      {
      }
      

      【讨论】:

        【解决方案3】:

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

        public int DataPeriodId{get;set}
        

        你添加了只写

        public int DataPeriodId
        

        而且mvc不能绑定。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-20
          • 1970-01-01
          • 1970-01-01
          • 2011-12-16
          相关资源
          最近更新 更多