2012-06-25 42 views
1

我需要一個簡單的JavaScript數組傳遞給我的WCF AJAX的web服務:JavaScript數組作爲WCF 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與我的值調用。 將簡單的KeyValuePair列表傳遞給我的web服務的最佳方法是什麼?

+0

如果代理調用,您是否看到JSON請求中的值? –

+0

我檢查過它的值是空的。所以看來我不得不使用另一種方法。 –

+0

您可以將參數類型更改爲Array,然後嘗試通過在客戶端上使用JSON序列化程序傳遞數組,因爲您的WCF服務的請求格式設置爲JSON。 – Rajesh

回答

1

我能找到解決自己:

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

必須調用像這樣的javascript:

VAR PARAMS = [{ 「鍵」: 「A」, 「值」:5},{ 「鍵」: 「B」, 「值」:「測試}]

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

以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] 
class NameValuePair 
{ 
[DataMember] 
public string Key {get;set;} 
[DataMember] 
public string Value {get;set;} 
}