【问题标题】:SignalR, passing an object from the HUB to the Client (MVC C#)SignalR,将对象从 HUB 传递到客户端 (MVC C#)
【发布时间】:2014-07-19 12:10:23
【问题描述】:

我查看了其他问题,但他们似乎没有完全回答这个问题,我试图通过 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.');

};

现在只是出于测试目的,我只是退出控制台,但这会返回:

“测试接收数据:测试。”是怎么回来的。

我错过了什么?

【问题讨论】:

  • 你不是必须先eval(jsonObject)receivePlaylist()吗?
  • 你在recievePlaylist 函数中查看过jsonObject 吗?它什么都没有吗?
  • 顺便说一句,你的“玩家”对象在 foreach 循环中被多次覆盖 - 你确定这是你的计划吗?

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


【解决方案1】:

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

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

jsonObject = JSON.parse(jsonObject);

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多