Istnieje sposób, aby to zrobić. Kontrakt operacyjny jest w rzeczywistości ciągiem. Unikałem ciągu jsonów, aby zachować ciąg. Następnie w metodzie internetowej usunięto łańcuch znaków i przeanalizowałem go w słowniku używając NewtonSoftJson Użyłem słownika, ale możesz też zrobić słownik, jeśli chcesz. Nadzieję, że to przydatne ...
użyłem NewtonSoft JSON biblioteki ...
C# kod
using Newtonsoft.Json;
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
public void testMethod(string jsonData)
{
string data = Uri.UnescapeDataString(jsonData);
Dictionary<string, string> x = jsonConvert.DeserializeObject<Dictionary<string, string>>(data);
foreach (KeyValuePair<string, string> kvp in x)
{
}
}
JSCode
var Data = {
width: 400,
height: 200,
someString: "somedata"
};
$.ajax({
type: "POST",
url: "Service1.svc/testMethod",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 1000000,
data: '{"jsonData": "' + escape(JSON.stringify(Data)) + '"}',
error: function(error) {
},
success: function (data) {
},
});
Możesz spojrzeć na tę stronę w dokumentacja WCF (która jest znacznie nowsza niż to pytanie): https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/collection-types-in-data-contracts –