ich jQuery 1.9.1 und MVC 4.De-Serialisierung Objekt in MVC4 Aktion Ergebnisse in null-Wert
Ich habe folgendes Javascript bin mit:
$.ajax({
url: '/Home/doSomething',
type: 'POST',
data: JSON.stringify({ devices: [{ Id: 123, Name: "something", MapName: "map" },{ Id: 321, Name: "a name", MapName: "another map" }] }),
dataType: 'json',
contentType: 'application/json'
}
Und der folgenden C# in meinem Homecontroller:
[HttpPost]
public string doSomething(Device[ ] devices)
{
//stuff consuming that array
}
die Geräteklasse wird wie folgt definiert:
[Serializable]
public class Device
{
public long Id;
public string Name;
public string MapName;
}
Entsprechend dem Debugger ist das Array devices ein Array mit zwei Elementen, wobei alle Eigenschaften jedes Device-Elements null sind.
Nach Chrom, sieht die Post-Daten wie folgt aus:
{
"devices": [
{
"Id": 123,
"Name": "something",
"MapName": "map"
},
{
"Id": 321,
"Name": "a name",
"MapName": "another map"
}
]
}
Was falsch ist hier, dass macht MVC schwören auf und ab, dass diese Objekte null sind, noch geben Sie mir noch eine angemessene Länge Reihe von Sie?
Ich habe versucht, das Array direkt zu veröffentlichen, ohne JSON.stringify darauf aufzurufen. Ich habe versucht, das Array innerhalb eines Objekts als eine Eigenschaft namens "Geräte" zu veröffentlichen, wiederum ohne es zu striggern. Ich habe versucht, das Array in einem Objekt als eine Eigenschaft namens "Geräte" zu veröffentlichen, während nur das Array selbst string.
All dies führt zu einem schlechten Verhalten der einen oder anderen Form. Entweder stellt chrome die entsprechenden Daten überhaupt nicht zur Verfügung, oder MVC deinstalliert sie nicht.
Ich habe das Netz durchforstet und kann anscheinend keine Beispiele finden, warum dies gebrochen werden sollte.
bearbeiten 2013.02.21 13.12 UTC-5:
ich auch dies versucht haben, ohne JSON zu verwenden und nur lassen jQuery es als Formulardaten veröffentlichen. Hier ist der Code für das:
var postData = { devices: [{ Id: 123, Name: "something", MapName: "map" }, { Id: 321, Name: "a name", MapName: "another map" }] };
$.ajax({
url: '/Home/doSomething',
type: 'POST',
data: postData
});
Und die C# ist immer noch die gleichen wie oben.
Das Verhalten ist immer noch das gleiche wie wenn es JSON war. MVC erkennt ein Array mit 2 Elementen, aber alle Werte der Objekte in diesem Array sind Standard (0 für die Ganzzahl und null für die Strings).
Für was es wert ist, schlägt dies auch fehl, wenn ich es nicht als JSON post. Ich bin nicht mit JSON verheiratet, aber ich brauche MVC zum Deserialisieren der Post-Daten/irgendwie /. – dodexahedron