Die folgende sage ich definitiv funktioniert, kann zu empfangen. Ich habe es gerade getestet. Tut mir leid, es ist in vb.net, aber Sie sollten die Idee bekommen.
Auf der Serverseite: In IService1.vb
Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Namespace Webservices
<ServiceContract()>
Public Interface IService1
<OperationContract()> _
<WebInvoke(method:="POST", ResponseFormat:=WebMessageFormat.Json, BodyStyle:=WebMessageBodyStyle.WrappedRequest)> _
Function test(manageBusiness As ManagedBusiness) As string
End Interface
End Namespace
In Service1.svc.vb
Imports System.Runtime.Serialization
Imports System.ServiceModel.Activation
Namespace Webservices
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Required)>
Public Class Service1
Implements IService1
Public function test(manageBusiness As ManagedBusiness) As string Implements IService1.test
Return "done"
End function
End Class
<CollectionDataContract()>
Public Class Services
Inherits List(Of Service)
End Class
<DataContract()>
Public Class Service
<DataMember()>Public Property Name As String
<DataMember()>Public Property Desc As String
<DataMember()>Public Property LongTime As Integer
End Class
<DataContract()>
Public Class ManagedBusiness
<DataMember()>Public Property Name As String
<DataMember()>Public Property Desc As String
<DataMember()>Public Property Services As Services
End Class
End NameSpace
verdrahtet ich die webconfig Einstellungen auf.Und setzen diese Jquery Ajax-Aufruf auf der Client-Seite:
$("#btnTest").click(function() {
var services = [];
services.push({
Name: "aaaaaa",
Desc: "aaaaaa",
LongTime: 30
});
services.push({
Name: "aaaaaa1",
Desc: "aaaaaa",
LongTime: 30
});
var data = {};
data.manageBusiness = {
Name: "aaaaaa",
Desc: "aaaaaaaaaaaa",
Services: services
}
$.ajax({
type: "POST",
url: "http://localhost:64110/Webservices/Service1.svc/test",
dataType: "json",
contentType: "application/json; charset=utf-8",
async: true,
data: JSON.stringify(data),
success(msg) {
}
});
});
Ich kann bestätigen, dass die angeforderte Payload war wie folgt:
{"manageBusiness":{"Name":"aaaaaa","Desc":"aaaaaaaaaaaa","Services":[{"Name":"aaaaaa","Desc":"aaaaaa","LongTime":30},{"Name":"aaaaaa1","Desc":"aaaaaa","LongTime":30}]}}
und der WCF-Dienst deserialisiert alles gut. Ich denke, was Sie vermisst haben, war das [CollectionDataContract] Attribut.
UPDATE: Ich habe versucht, das Attribut [CollectionDataContract] zu entfernen, und es funktionierte noch. Ich vermute also, dass die Datenvertragsattribute nur zur Serialisierung dienen, nicht zur Deserialisierung benötigt werden (?)
Es hat auch nicht geholfen. Die Liste wird weiterhin null. –
Nun, Ihre JSON-Darstellung ist gut geformt, so dass ich nicht verstehen kann, was falsch ist, können Sie noch mehr Code senden? Zum Beispiel der C# -Code, der den Aufruf verarbeitet, und der JavaScript-Code, der die Anfrage sendet? –
Funktioniert es wirklich? Ich gehe auch durch dasselbe Szenario! Ich brauche diesen Code. –