【问题标题】:C# does not recognize JSON Array correctlyC# 无法正确识别 JSON 数组
【发布时间】:2016-04-29 14:18:01
【问题描述】:

我正在努力解决有线 JSON 问题。我正在使用 ASP C# 并有一个视图将 JS-Array 发送到控制器操作。

这是 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 数据?点数据量是对的,如下图所示:

如果有一些建议指出我没有发现的错误,我会很高兴

【问题讨论】:

  • 你的Point类是什么样的?
  • 刚刚注意到了。谢谢。

标签: c# jquery json


【解决方案1】:

将 HTTP 方法从 GET 更改为 POST

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

GET 方法使用不是JSON 友好的 URL 字符串发送数据

【讨论】:

  • 非常感谢您..成功了
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果您没有在 $.ajax 调用上设置方法或发出 http GET 并序列化 url 中的数组,那么如果您尝试序列化一个大数组,那么您将遇到 url 长度问题。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      相关资源
      最近更新 更多