我正在努力解决有线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数据?点数据的数量是正确的,如下所示:
我会很高兴看到一些建议,指出我没有找到错误
答案 0 :(得分:4)
从POST
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");
});