2016-04-29 11 views
2

Ich kämpfe um ein verdrahtetes JSON-Problem herum. Ich arbeite mit ASP C# und habe eine View, die ein JS-Array an eine Controller-Aktion sendet.C# erkennt JSON-Array nicht richtig

Hier ist die Struktur der JSON-Daten.

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

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

Hier ist die Routine Ich verwende den JSON-Array zu erzeugen: zu Testzwecken nicht gültig MapData erzeugt.

$("#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"); 
    }); 
}) 

Hier ist der Controller Aktion

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); 
} 

Die seltsame Sache: Wenn ich die Daten stringify vor dem Absenden, es sieht wie folgt aus:

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

Die Daten zurück von Controller-Looks kommen genau dasselbe, wenn ich es stringiere: Warum kann C# die Punktdaten nicht analysieren? Die Menge an Punktdaten ist richtig, wie Sie unten sehen können:

JSON data

Ich werde auf einige Ratschläge freuen mich deutete auf einen Fehler, den ich nicht

+0

Was macht Sie 'Point' Klasse Blick getan werden? –

+0

Habe es gerade bemerkt. Vielen Dank. –

Antwort

4

Änderung HTTP-Methode zu POST von GET

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

GET Methode sendet Daten URL-Zeichenfolge verwendet, die nicht JSON freundlich ist

+0

Vielen Dank..das hat der Trick gemacht – climbah

0

Im Javascript gefunden haben, wo Sie die Erzeugung Testdaten, legte er lat und lng Namen in Anführungszeichen: mapPoints.Points.push ({ "lat": "asdf1", "lng": "asdf1"})

0

Wenn Sie setzen nicht die Methode auf dem $ Schnipsel Aufruf yor Ausgabe eine HTTP-GET und in der URL das Array Serialisierung, dass die Art und Weise Sie wird Probleme mit der URL-Länge haben, wenn Sie versuchen, ein großes Array zu serialisieren.

Eine bessere Möglichkeit, einen Beitrag Anruf sendet, werden könnte, und die Anordnung auf dem Körper des Anrufs Serialisierung, kann dies auf diese Weise wie

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