JSON不会被MVC解析

时间:2014-09-01 12:43:49

标签: c# javascript asp.net-mvc json model-view-controller

我有以下C#:

型号:

namespace WebInventory.Models
{
    [DataContract]
    public class PostbackList
    {
        [DataContract]
        public class Field
        {
            public int ID;
            public string Name;
            public int DataTypeID;

            public bool Checked;
        }

        [DataMember]
        public int TypeID;

        [DataMember]
        public IList<Field> Fields;

        [DataMember]
        public IList<IList<string>> Values;

        #region Non DataMember
        public IList<int> UsedFieldsID;
        #endregion
    }
}

的Controler:

public class ListController : JsonController
{
    [HttpPost]
    public ActionResult GetList(PostbackList data)
    {
        <...>
    }
}

我发送以下JSon对象:

{"TypeID":16,"Fields":[{"ID":42,"Name":"","DataTypeID":0,"Checked":true},{"ID":43,"Name":"","DataTypeID":0,"Checked":true},{"ID":44,"Name":"","DataTypeID":0,"Checked":true}],"Values":null}

使用:

    $.ajax({
        url: url
        , type: 'POST'
        , dataType: 'json'
        , contentType: 'application/json; charset=utf-8'
        , data: JSON.stringify(parameter)
        , xhrFields: {
            withCredentials: true
        }
    })
    .done(function (data) {
        fillTemplate(data);
    });

我在MVC GetList中设置了一个断点,在那里我看到data未初始化。我尝试使用数组而不是(I)List,但它没有帮助。

我看不出有什么不对。

1 个答案:

答案 0 :(得分:3)

我认为你应该使用属性而不是字段。

我最近遇到了同样的问题,模型活页夹没有拿起我的json。

我改为改为属性。

public int ID {get; set;}

将所有字段更改为属性,如下所示。

namespace WebInventory.Models
{
    [DataContract]
    public class PostbackList
    {
        [DataContract]
        public class Field
        {
            public int ID {get; set;}
            public string Name {get; set;}
            public int DataTypeID {get; set;}

            public bool Checked {get; set;}
        }

        [DataMember]
        public int TypeID {get; set;}

        [DataMember]
        public IList<Field> Fields {get; set;}

        [DataMember]
        public IList<IList<string>> Values {get; set;}

        #region Non DataMember
        public IList<int> UsedFieldsID {get; set;}
        #endregion
    }
}