Javascript数组作为WCF Web服务参数

我需要将一个简单的Javascript数组传递给我的wcf ajax webservice:

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

这是我的WCF方法:

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

当使用我的值从javascript调用“values”时,它是一个空数组。 将一个简单的KeyValuePairs列表传递给我的webservice的最佳方法是什么?

我自己找到了解决方案:

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

必须在这样的javascript中调用:

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

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

这当然可以简化:

 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) + '}', ... 

拿Javascript对象

 var obj = { Key: "xyz", Value: "9" }; Array objArray = new Array(); objArray.push(obj); $.ajax({ //Add necessary detail here data: JSON.stringify(objArray); }); 

在服务层中,使用NameValuePair数组替换对象

 public void DoSomething(NameValuePair[] values) {} [DataContract] public class NameValuePair { [DataMember] public string Key {get;set;} [DataMember] public string Value {get;set;} }