Asp.net mvc MVC-使用javascript发送数组+;ajax到控制器

Asp.net mvc MVC-使用javascript发送数组+;ajax到控制器,asp.net-mvc,json,Asp.net Mvc,Json,我正在尝试将带有坐标的数组发送到MVC控制器 我是这样做的(没有发布所有代码,只有相关的): 然后我用以下对象作为数据进行ajax调用 var data = { OtherData: "SomeString", OtherData2: 1, Coords: coords }; 当我调试控制器上的操作时,其他数据被正确解析 我期望的模型是这样的 public class Model { public int OtherData2 { get; set; }

我正在尝试将带有坐标的数组发送到MVC控制器 我是这样做的(没有发布所有代码,只有相关的):

然后我用以下对象作为数据进行ajax调用

var data = {
    OtherData: "SomeString",
    OtherData2: 1,
    Coords: coords
};
当我调试控制器上的操作时,其他数据被正确解析 我期望的模型是这样的

public class Model
{
    public int OtherData2 { get; set; }
    public string OtherData { get; set; }
    public Point[] Coords { get; set; }
}
我已经试过了 -使用列表 -以X和Y为属性创建类简单点 -将X和Y值作为字符串值发送 -发送连接为1个字符串的X和Y值并接收字符串列表

在点对象作为数组的情况下,我得到了一个具有相同数量点的列表,但它们都是空的(0,0),列表对象为空 有什么想法吗


可能需要注意的是,我使用的MVC4看起来好像DefaultModelBinder不知道如何绑定到列表,
(缺少正确的类型转换器) 您可以创建自己的点和类型转换器:

[TypeConverter(typeof(PointTypeConverter))]
public class Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

/// <summary>
/// we need this so we can use the DefaultModelBinder to bind to List<Point>
/// example at http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx
/// </summary>
public class PointTypeConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return true;
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        Point ret = serializer.Deserialize<Point>((string)value);
        return ret;
    }

}
在MVC3中测试了所有这些,没有理由它在MVC4中不起作用
希望这有帮助

谢谢,我知道制作自己的ModelBinder或ConverterClass是一个选择,但我不喜欢这个选择。谢谢你的回答,这可能是唯一正确的解决方案。
[TypeConverter(typeof(PointTypeConverter))]
public class Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

/// <summary>
/// we need this so we can use the DefaultModelBinder to bind to List<Point>
/// example at http://msdn.microsoft.com/en-us/library/ayybcxe5.aspx
/// </summary>
public class PointTypeConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return true;
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        Point ret = serializer.Deserialize<Point>((string)value);
        return ret;
    }

}
[HttpPost]
public ActionResult testPoints(List<Point> cords)
{
    //party
}
$.ajax({
url: "/Home/testPoints/",
type: "POST",
data: {
            //note that i stringify very value in the array by itself
    cords: [JSON.stringify({'X':1,'Y':2}),JSON.stringify({'X':3,'Y':4})]
},
success: function (data)
{
    //client party
}
});