RESTful な目的で MVC Web Api を使用しています。私のコントローラ メソッドは、シリアル化された Json オブジェクトを文字列形式で返します。次のような簡単な方法があります。
public string Put(Folder folder)
{
var folder1 = new Folder{Id="1", IsShared=true,Name= folder.Name};
var jsSerializer = new JavaScriptSerializer();
return jsSerializer.Serialize(folder1);
}
このように QUnit テストで Get、Put、Delete、および Post メソッドを呼び出すと、正常に動作します。
ajax: {
getData: function (url, data) {
return processRequest(url, data, "GET");
},
postData: function (url, data) {
return processRequest(url, JSON.stringify(data),"POST");
},
updateData: function (url, data) {
return processRequest(url, JSON.stringify(data),"UPDATE");
},
deleteData: function (url, data) {
return processRequest(url, JSON.stringify(data),"DELETE");
},
processRequest: function (url, data, type) {
return $.ajax({
type: type,
dataType: "json",
contentType: "application/json;charset=utf-8",
url: url,
data: data,
processData: true
});
}
},
クライアントはシリアル化された Json をもう必要としないため、戻り値を文字列から実際の Json オブジェクトに変更する必要があります。実際の Json オブジェクトが必要です。そこで、メソッドの戻り値の型を JsonValue に変更し、シリアル化された Json オブジェクトを JsonValue.Parse() メソッドを使用して解析しました。サーバー側でコードをトレースすると、JsonValue オブジェクトのプロパティに適切な値があり、問題ないように見えますが、クライアント側で返された JsonValue には空のプロパティがあります。ここに変更された方法があります:
public JsonValue Put(Folder folder)
{
var folder1 = new Folder{Id="1", IsShared=true,Name= folder.Name};
var jsSerializer = new JavaScriptSerializer();
return JsonValue.Parse(jsSerializer.Serialize(folder1));
}
テスト結果は次のとおりです。
Expected:
{
"Id": "1",
"IsShared": true,
"Name": "abc"
}
Actual:
{
"Id": [],
"IsShared": [],
"Name": []
}
どんなアイデアでも感謝します。