Hay una manera de hacerlo ... El contrato de operación es en realidad una cadena. Escapo de la cuerda de Json para mantenerla como una cuerda. Luego, en el método web, desapego la cadena y la analizo en un diccionario usando NewtonSoftJson. Utilicé el diccionario, pero también podría hacer el diccionario si quisiera. Espero que esto sea útil ...
que utiliza la biblioteca JSON NewtonSoft ...
código C#
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)
{
}
}
códigoJS
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) {
},
});
Es posible que desee echar un vistazo a esta página la documentación de WCF (que es mucho más reciente que esta pregunta): https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/collection-types-in-data-contracts –