我有同樣的問題,按照這樣的問題:WCF not deserializing JSON inputWCF不反序列化JSON - 在Web服務的參數爲空
我在一個解決方案茫然和絕望。我已經在網上尋找答案,但我發現只有這個問題符合我的確切問題。服務啓動時,我的datacontract參數也沒有任何作用。
我已經在上面的問題中嘗試了答案的要點,但是它們沒有提供任何線索(Web服務執行OK - 我沒有收到任何異常 - 而且我也看不到什麼解串器在做什麼 - 或者視情況而定)。我對WCF服務很陌生,所以請和我一起裸照。
由於嵌套JSON的大小,我使用POST。
請問一些WCF的精靈,或者那個問題的原始海報,請賜教?
如果需要更詳細的信息,我會根據要求提供。我的問題非常類似於我希望OP能夠通過他如何解決問題的問題。
更新
代碼片段 - 我保密協議,所以不能發佈細節。
「在頁JS」:
var settings = {
a: $("#a").val(),
b: $("#b").val(),
c: $("#c").val(),
d: $("#d").val(),
e: $("#e").val(),
f: $("#f").prop("checked").toString(),
g: $("#g").prop("checked").toString()
};
var data= {
a: [1011,1012,1013],
b: JSON.stringify(settings),
c: "01/01/2011 23:59:59"
};
Library.Services.Post("path/to/service/Service.svc/SaveSettings", data, true, function (result) {
if (result.Succeeded) {
ShowSuccess("Success.");
}
else {
ShowError("Failure.");
}
});
「Library.Services.Post」:
Post: function (serviceUrl, data, async, successHandler, errorHandler) {
var continueOperation = true;
if (!data) {
data = "{}";
}
try {
var obj = $.parseJSON(data);
obj = null;
}
catch (err) {
continueOperation = false;
JS.ShowError("Data attribute is not a valid JSON object");
}
if (typeof (data) !== "string") {
data = JSON.stringify(data);
}
if (continueOperation) {
Library.Services._ajax("POST", serviceUrl, data, async, successHandler, errorHandler);
}
continueOperation = null;
}
「Library.Services._ajax」:
_ajax: function (method, serviceUrl, data, async, successHandler, errorHandler) {
if (!typeof (successHandler) === "function") {
continueOperation = false;
ShowError("Success handler must be a function");
}
try {
$.ajax({
async: async,
cache: false, // don't cache results
type: method,
url: Library.Services.baseUrl + serviceUrl,
contentType: "application/json; charset=utf-8",
data: data,
dataType: "json",
processData: false, // data processing is done by ourselves beforehand
success: function (data, statusText, request) {
if (data != null) {
if (data.d && data.d.__type) {
data = data.d;
}
else {
// Wrapped message: return first property
$.each(data, function (name, value) {
data = value;
return false;
});
}
}
successHandler(data, statusText, request);
},
error: function (request, statusText, error) {
//debugger;
var res = request.responseText;
if (request.status != 200) {
if (!request.isResolved()) {
ShowError(request.status + " " + request.statusText);
}
else {
ShowError("Request could not be resolved.");
}
}
else {
ShowError("Unknown error status.");
}
if (typeof (errorHandler) === "function") {
errorHandler();
}
}
});
}
catch (err) {
ShowError("AJAX call failed");
}
}
「服務.svc「:
<DataContract()>
Public Class SaveSettingsContract
<DataMember(Order:=1)>
Public a() As String
<DataMember(Order:=2)>
Public b()() As String
<DataMember(Order:=3)>
Public c As String
End Class
<OperationContract()>
<WebInvoke(BodyStyle:=WebMessageBodyStyle.Wrapped,
RequestFormat:=WebMessageFormat.Json,
ResponseFormat:=WebMessageFormat.Json)>
Public Function SaveSettings(ByVal settings as SaveSettingsContract) As WebServiceResults.BaseResult
' At this point in debugging, settings is Nothing
End Function
添加了更多信息和代碼示例。 – 2011-06-17 12:28:59