我想要做的就是将JSON返回给浏览器。
这就是现在返回的内容 - 它是JSON但它在字符串中。我如何只返回JSON?
这是我的代码:
namespace ...Controllers
{
public class NotificationsController : ApiController
{
public string getNotifications(int id)
{
var bo = new HomeBO();
var list = bo.GetNotificationsForUser(id);
var notificationTreeNodes = (from GBLNotifications n in list
where n.NotificationCount != 0
select new NotificationTreeNode(n)).ToList();
List<Node> lOfNodes = new List<Node>();
foreach (var notificationTreeNode in notificationTreeNodes)
{
Node nd = new Node();
nd.notificationType = notificationTreeNode.NotificationNode.NotificationType + " " + "(" + notificationTreeNode.NotificationNode.NotificationCount + ")";
var notificationList = bo.GetNotificationsForUser(id, notificationTreeNode.NotificationNode.NotificationTypeId).Cast<GBLNotifications>().ToList();
List<string> notificationDescriptions = new List<string>();
foreach (var item in notificationList)
{
notificationDescriptions.Add(item.NotificationDescription);
}
nd.notifications = notificationDescriptions;
lOfNodes.Add(nd);
}
var oSerializer = new JavaScriptSerializer();
string sJSON = oSerializer.Serialize(lOfNodes);
return sJSON;
}
}
public class Node
{
public string notificationType
{
get;
set;
}
public List<string> notifications
{
get;
set;
}
}
}
如果我尝试使用此控制器的URL进行GET,则Fiddler不会在JSON下显示任何内容。
任何人都知道这里的问题是什么?
答案 0 :(得分:4)
因为你返回JSON:
var oSerializer = new JavaScriptSerializer();
string sJSON = oSerializer.Serialize(lOfNodes);
return sJSON;
您应该返回lOfNodes
(并将返回值更改为List<Node>
)并依赖内置的内容协商,而不是这样做。
Web API将根据Accept
标头返回XML或JSON。如果您需要其他格式,您可以轻松编写自己的格式化程序。
编辑:
由于您在使用Kendo UI时遇到一些问题(我不知道请求是如何进行的),因此显式删除XML格式化程序可能会有所帮助。有关示例,请参阅this post。