1

I need to pass a simple Javascript array to my wcf ajax webservice:

var array = new Array();
array["ParamA"] = "xyz";
array["12344"] = "9";
myNamespace.DoSomething(array);

This this my WCF method:

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public void DoSomething(object values)

"values" is an empty array when it is called from javascript with my values. What is the best approach to pass a simple list of KeyValuePairs to my webservice?

3
  • Do you see the values in the JSON request if you proxy the call? Commented Jun 25, 2012 at 11:23
  • I checked it and the values are empty. So it seems I have to use another approach. Commented Jun 25, 2012 at 11:38
  • Can you change the parameter type to Array and then try to pass the array by using a JSON serializer on the client as your WCF service's Request Format is set to JSON. Commented Jun 25, 2012 at 15:09

2 Answers 2

1

I was able to find the solution myself:

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public void DoSomething(Dictionary<string, object> values)

must be called in javascript like this:

var params = [{ "Key": "A", "Value": 5}, { "Key": "B", "Value": "Test}]

$.ajax({
    type: "POST",
    contentType: "application/json",
    dataType: "json",
    data: '{"values":' + JSON.stringify(params) + '}',
    ...

This can of course be simplified:

var parameters = [{ "A": 5}, { "B": "Test"}];

var dictionary = new Array();
for (var i in parameters) {
   var key = Object.keys(args[i])[0];
   var value = args[i][key];
   dictionary.push({ "Key": key, "Value": value });
} 

$.ajax({
    type: "POST",
    contentType: "application/json",
    dataType: "json",
    data: '{"values":' + JSON.stringify(dictionary) + '}',
    ...
Sign up to request clarification or add additional context in comments.

Comments

1

Take Javascript object

var obj = {
    Key: "xyz",
    Value: "9"
};

Array objArray = new Array();
objArray.push(obj); 

$.ajax({
//Add necessary detail here               
data:  JSON.stringify(objArray);
});

In service layer replace object with array of NameValuePair

public void DoSomething(NameValuePair[] values)
{}

[DataContract]
public class NameValuePair
{
[DataMember]
public string Key {get;set;}
[DataMember]
public string Value {get;set;}
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.