2015-09-04 56 views
1

故事在於,我有ROOM Model類。我想用Signalr返回json。可能嗎 ?如果是這樣,我該如何使用它?信號返回模型對象

PS:而且我知道我不會把房間對象留給客戶。

public List<RoomModel> GetRooms() 
     { 
      GameUser user = _gameService.GetUserByClientId(Context.ConnectionId); 

     var room = _gameService.GetAllowedRooms(user).Select(r => new RoomModel 
     { 
      Name = r.Name, 
      Count = 0, 
      Private = r.Private, 
      Closed = r.Closed, 
     }).ToList(); 

     return room; 
    } 

回答

2

當您將對象發送給客戶端時,SignalR會自動序列化您的對象。 (我假設你的客戶端是javascript。)

正如你所看到的this example他們發送ShapeModel複雜的對象在JavaScript中處理。序列化全部自動化。

如果您的示例中的方法是集線器方法,我建議您以不同的方式結束它。您可能會調用客戶端事件,而不是返回值。因此:

public class RoomHub : Hub { 
    public void GetRooms() { 
     List<Room> rooms = new List<Room>(); 
     rooms.Add(new Room{ Name = "Room1", Count = 12, Closed = true, Private = false}); 
     rooms.Add(new Room{ Name = "Room2", Count = 20, Closed = false, Private = true}); 

     // sending a list of room objects 
     Clients.Client(Context.ConnectionId).roomInfo(rooms); 
    } 
} 

// Room class (your complex object) 
public class Room 
{ 
    public string Name { get; set; } 
    public int Count { get; set; } 
    public bool Private { get; set; } 
    public bool Closed { get; set; } 
} 

查看有關從集線器方法呼叫here的詳細信息。

然後JavaScript客戶端:

var roomHub = $.connection.roomHub; 

roomHub.client.roomInfo = function (rooms) { 
    // the parameter rooms is a serialized List<Room> 
    // which here will be an array of room objects. 
    console.log(rooms); 
    // You can read the room properties as well 
    for (i=0; i<rooms.length; ++i) { 
     console.log(rooms[i].Name); 
     console.log(rooms[i].Count); 
    } 
} 

$.connection.hub.start().done(function() { 
    console.log("You are connected"); 
    roomHub.server.getRooms(); 
}); 

在我的瀏覽器控制檯:

enter image description here

+0

那是一個很好的例子,感謝您的labor.I編輯我這樣的代碼。順便說一句,我的客戶端是android。我正在使用Android Studio。還有一個愚蠢的問題,你知道我怎麼能在android端接收這個json? – hsyn

+0

我不是那麼好,我可能會這樣:http://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 我可以問你如何連接到SignalR事件與Android系統。你有一個教程或類似的東西? – DDan

+0

你可以查看https://github.com/JabbR/Android這個項目來看看他們是如何做到的。如果您有任何疑問,請隨時提問。 – hsyn