如何将JSON数据发布到Action方法?

我正在POST到服务器(.Net),我无法将数组传递给控制器​​操作。 我已经尝试了几乎所有可能的组合而没有任何运气。 然而,其中一个令我困惑。

如果我执行此请求:

var dataArray = [ { /* some plain object */ }, { /* another plain object */ ], ... ]; $.ajax(url, { type: "post", data: { models: dataArray } }); 

结果发送了一个请求数据

 models[0][property1]:value1 models[0][property2]:value2 ... models[1][property1]:value3 models[0][property2]:value4 ... 

不幸的是,.Net MVC4并不理解该请求。 在一个相关的SO问题之后我尝试了traditional: true但发送到服务器的请求如下所示:

 models:[object Object] 

显然,它不是发送对象,而是发送字符串"[object Object]" 。 这有什么问题? 对于涉及非原始参数的每个请求,我是否注定要发送序列化字符串(并且必须在服务器端手动反序列化它们)?

注意 :这是我的动作方法。 至于现在,我尝试的一切都会产生

  1. 参数是一个正确大小的数组,但每个项目都是一个新的未修改(空)对象或
  2. 参数为null

     [HttpPost] public ActionResult UpdateModels(Models.SimpleModel[] models) 

示例JQuery

 var MyConnectionList = { ColorList: [] }; function SendStream() { MyConnectionList.ColorList.push({ "Name": 'Test1', "Color": 'red' }); MyConnectionList.ColorList.push({ "Name": 'Test2', "Color": 'Green' }); $.ajax({ url: url, data: JSON.stringify(MyConnectionList), async: true, type: 'POST', beforeSend: function (xhr, opts) { }, contentType: 'application/json; charset=utf-8', complete: function () { }, success: function (data) { } }); } 

样本控制器

 public ActionResult SendStream(List ColorList) { return null; } 

尝试使用JSON.stringify作为数组,如JSON.stringify(dataArray)

UPDATE

如果我们在使用ajax调用时使用stringify,MVC3会自动将字符串数据转换为.NET对象。 我认为MVC4应该是这样的。

更新2
将contentType属性设置为application / json; 字符集= utf-8的