używam jQuery 1.9.1 i MVC 4.De-szeregowania obiektu w wynikach działania MVC4 w wartości null
Mam następujący skrypt:
$.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'
}
i następujący C# w moim HomeController:
[HttpPost]
public string doSomething(Device[ ] devices)
{
//stuff consuming that array
}
klasę urządzeń jest określona w następujący sposób:
[Serializable]
public class Device
{
public long Id;
public string Name;
public string MapName;
}
Według debuggera, tablica urządzeń jest dwuelementową tablicą, w której wszystkie właściwości każdego elementu Device są puste.
Według chrom, dane stanowisko wygląda następująco:
{
"devices": [
{
"Id": 123,
"Name": "something",
"MapName": "map"
},
{
"Id": 321,
"Name": "a name",
"MapName": "another map"
}
]
}
Co tu jest nie tak, że robi MVC przysięgam w górę iw dół, że obiekty te są nieważne, ale wciąż daje mi tablicę odpowiednie długości im?
Próbowałem wysyłać tablicy bezpośrednio, bez wywoływania JSON.stringify na nim. Próbowałem umieszczać tablicę wewnątrz obiektu jako właściwość o nazwie "urządzenia", ponownie bez oznaczania jej. Próbowałem umieścić tablicę wewnątrz obiektu jako właściwość o nazwie "devices", a jedynie stringifying samej tablicy.
Wszystko to powoduje złe zachowanie jednej lub drugiej formy. Albo chrome nie publikuje odpowiednich danych, albo MVC nie deklasuje go.
Przeszukałem internet i nie mogę znaleźć przykładów, dla których to powinno zostać zerwane.
Edycja 21.02.2013 13:12 UTC-5:
Próbowałem to również bez użycia JSON i po prostu pozwolić jQuery zakładać go jako danych formularzy. Oto kod na to:
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
});
A C# jest nadal takie same jak powyżej.
Zachowanie jest jednak takie samo jak w przypadku JSON. MVC widzi tablicę 2 elementów, ale wszystkie wartości obiektów w tej tablicy są domyślne (0 dla liczby całkowitej i zero dla łańcuchów).
To, co jest warte, nie działa również, gdy nie publikuję go jako JSON. Nie jestem żonaty z tym przy użyciu JSON, ale potrzebuję MVC do deserializacji danych pocztowych/jakoś /. – dodexahedron