Hallo Forum,
ich spiele gerade mit AJAX rum und versuche eine Objekt an einen WebService zu übergeben.
Die Klasse Parent:
public class Parent
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DayOfBirth { get; set; }
public ChildrenCollection Children { get; set; }
}
Die Klasse Child:
public class Child
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DayOfBirth { get; set; }
}
Die ChildrenCollection leite ich von System.Collections.Generic.ICollection<Child> ab und ist als Serializable markiert.
Als Antwort erhalte ich vom Service folgende Fehlermeldung:
"Der Typ "TestWebService.ChildrenCollection" wird für die Deserialisierung eines Arrays nicht unterstützt.
Wie könnte ich denn sonst mein Objekt per Ajax übermitteln ohne gleich meine Grundstruktur zu verändern?
Anbei mal mein JavaScript Code
$(document).ready(function() {
$("#submit").click(function(e) {
e.preventDefault();
var Person = new Object();
Person.FirstName = "Firstname";
Person.LastName = "Lastname";
Person.DayOfBirth = new Date(1982, 06, 08);
Person.Children = null;
var Person1 = new Object();
Person1.FirstName = "ChildFirstname";
Person1.LastName = "ChildLastname";
Person1.DayOfBirth = new Date(2009, 12, 20);
Person.Children = new Array(Person1);
createPerson(Person);
});
function createPerson(personItem) {
var parameter = "{newPerson: " + JSON.stringify(personItem) + "}"; ;
$.ajax({
type: "POST",
url: "http://localhost:62588/Service1.asmx/CreatePerson",
data: parameter,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert("erfolgreich");
},
error: function(msg) {
alert("nicht erfolgreich");
}
});
}
});
Ich habe mal ein wenig mit den Collection Interfaces experimentiert. Implenentiere ich die ChildrenCollection als Ableitung von IList funktioniert die Übertragung. Ich finde allerdings, dass ich mit dieser Implementierung erheblich an Vorteilen gegenüber IList<T> verliere.