为什么我的API在XML节点内返回JSON?

时间:2013-07-29 18:52:02

标签: c# json asp.net-web-api fiddler

我想要做的就是将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下显示任何内容。

任何人都知道这里的问题是什么?

1 个答案:

答案 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