我将 MVC Web Api 用于 RESTful 目的。我的控制器方法以字符串格式返回序列化的 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 并使用 JsonValue.Parse() 方法解析序列化的 Json 对象。当我在服务器端跟踪我的代码时,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": []
}
我很感激任何想法。