C#无法正确识别JSON数组

时间:2016-04-29 14:18:02

标签: c# jquery json

我正在努力解决有线JSON问题。我正在使用ASP C#并且有一个View将JS-Array发送到Controller Action。

这是JSON数据的结构。

public class MapData
{
    public List<Point> Points { get; set; }
}

public class Point
{
    public string lat { get; set; }
    public string lng { get; set; }
}

这是我用来生成JSON数组的例程:出于测试目的,它不会生成有效的MapData。

$("#pac-save").click(function () {
    var mapPoints = {
        Points: []
    }

    mapPoints.Points.push({
        lat:"asdf1",
        lng:"asdf1"
    })
    mapPoints.Points.push({
        lat:"asdf2",
        lng:"asdf2"
    })    
    $.ajax({
        url: "/Map/saveGeplanteRoute",
        data:mapPoints
    }).done(function (dd) {
        alert("done");
    }).fail(function () {
        alert("error");
    });
})

这是控制器动作

public JsonResult saveGeplanteRoute(MapData data)
{
    var test = new MapData
    {
        Points = new List<Point>()
    };
    test.Points.Add(new Point() { lat = "asdf1", lng = "asdf1" });
    test.Points.Add(new Point() { lat = "asdf2", lng = "asdf2" });
    return Json(test);
}

奇怪的是:当我在发送之前对数据进行字符串化时,它看起来像这样:

"{"Points":[{"lat":"asdf1","lng":"asdf1"},{"lat":"asdf2","lng":"asdf2"}]}"

当我对其进行字符串化时,从Controller返回的数据看起来完全相同:为什么C#不能解析Point数据?点数据的数量是正确的,如下所示:

JSON data

我会很高兴看到一些建议,指出我没有找到错误

3 个答案:

答案 0 :(得分:4)

POST

将HTTP方法更改为GET
$.ajax({
        url: "/Map/saveGeplanteRoute",
        type: "POST",
        data: mapPoints
    }).done(function (dd) {
        alert("done");
    }).fail(function () {
        alert("error");
    });

GET方法使用不是JSON友好

的网址字符串发送数据

答案 1 :(得分:0)

在生成测试数据的javascript中,将他的lat和lng名称放在引号之间:mapPoints.Points.push({&#34; lat&#34;:&#34; asdf1&#34;,&#34 ; lng&#34;:&#34; asdf1&#34;})

答案 2 :(得分:0)

如果您没有在$ .ajax调用上设置方法,而是发出http GET,并在网址中序列化数组,那么如果您尝试序列化大数组,则会遇到网址长度问题。

更好的方法是发送一个post调用,并在调用的主体上序列化数组,这可以这样做

$.ajax({
    url: "/home/saveGeplanteRoute",
    data: mapPoints,
    method: 'POST'
})
.done(function (dd) {
     alert("done");
}).fail(function () {
     alert("error");
});