SignalR,将对象从HUB传递给客户端(MVC C#)

时间:2014-07-19 12:10:24

标签: c# javascript asp.net-mvc json signalr

我已经查看了其他问题,但他们似乎没有完全回答这个问题,我试图通过JSON将对象传递给客户端Javascript。我使用Newtonsoft.Json来简化这个过程,但我似乎无法接收到这个对象。

以下是代码:

建立连接后,我使用客户端javascript中的start()。done()调用Hub:

   //start comm with server
$.connection.hub.start().done(function () {
    console.log('Grabbing playlist data');
    Playlist.server.requestPlaylist();
});

这会调用以下方法,该方法应该抓取对象并将其传回:

    public void requestPlaylist()
   {
       var playlistData = (from c in db.Playlist where c.ID > 0 select c).Include(h => h.Song).ToList();
       Playlist player = new Playlist();

       foreach (var item in playlistData)
       {
           player.ID = item.ID;
           player.Profile = item.Profile;
           player.Song.ID = item.Song.ID;
           player.Song.name = item.Song.name;
           player.upvotes = item.upvotes;
       }

       string jsonObject = JsonConvert.SerializeObject(player);


       Clients.All.recievePlaylist(jsonObject);
   }

所以,在这里,我搜索数据库,获取结果并将其存储到播放列表模型中,然后使用newtonsoft.json将模型转换为json对象(它与示例的原理大致相同)在他们的网站上。)

从中调用的客户端javascript是:

function recievePlaylist(jsonObject) {
    console.log('test to recieve data: ' + jsonObject.ID + ' test.');

};

现在只是出于测试目的,我只是退出到控制台,但这没有回来:

"测试收到数据:测试。"它是如何回来的。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

因为在将对象传递给客户端之前将对象转换为服务器上的字符串,所以客户端会收到一个字符串。您对json对象的字符串表示形式没有ID属性,因此该值将为" undefined"。

在客户端上,您可以使用它将字符串转换为json对象:

jsonObject = JSON.parse(jsonObject);

只需将该行添加到recievePlaylist函数的顶部即可。

注意:您实际上不需要将服务器对象转换为服务器端的json字符串。 SignalR自动将服务器端对象转换为客户端上的json对象。

答案 1 :(得分:0)

如果您调用 WebAPI 并在客户端 (JavaScript/jQuery) 接收 json 响应/结果。在解析 jsone 响应并将其用作对象方面,这种方式对于 SignalR 或 WebAPI 都是通用的。

var obj = jQuery.parseJSON( '{ "name": "John" }' );
alert( obj.name === "John" );