我正在开发一个Javascript多人游戏,我需要使用signalR将Javascript对象从一个客户端发送到另一个客户端。直到现在我通过字符串或数组将客户端发送到客户端数据 但我不知道如何在服务器中接收Javascript对象以将该对象发送到另一个客户端。
var MyInfo = {
UserName: loginUserName,
userid: logInUserId,
getinfo: function() {
return this.UserName + ' ' + this.userid;
}
}
我应该使用哪种数据类型来接收集线器中的Javascript数据 我正在使用C#.NET MVC。
答案 0 :(得分:2)
我得到了问题的答案...... C#语言提供自动将Javascript对象转换为Object数据类型。因此,我将Javascript对象发送到服务器,然后以Object数据类型接收该对象。之后,我将该对象发送到目标客户端,如下所示:
var MyInfo = {
UserName: loginUserName,
userid: logInUserId,
getinfo: function() {
return this.UserName + ' ' + this.userid;
}
};
var MyInfo2 = {
UserName: "",
userid: "",
getinfo: function() {
return this.UserName + ' ' + this.userid;
}
};
var chessR = $.connection.gameHub;
var myConnectionID;
chessR.client.testObject = function(temp) {
MyInfo2.UserName = temp.UserName;
MyInfo2.userid = temp.userid;
alert(MyInfo2.getinfo());
}
$.connection.hub.start().done(function() {
chessR.server.testObject(MyInfo);
});
在signalR hub上写道:
public class GameHub : Hub
{
public void testObject(Object MyInfo)
{
Clients.Caller.testObject(MyInfo);
}
}
现在问题解决了。
答案 1 :(得分:1)
我认为最简单的方法是在服务器端创建一个包含JS模型相同属性的MyInfoModel
,并将其传递给服务器方法。
通常,SignalR和ASP.NET应该处理数据的序列化,让您发送和接收复杂的对象。 (请注意,我没有测试过,这只是一个有根据的猜测)。由于您可以轻松地将复杂对象从服务器发送到客户端,因此我认为没有理由不能将它们从客户端发送到服务器。
如果第一种方法(在服务器上创建模型并使服务器方法接受模型)不起作用,您可以序列化对象,将其作为字符串发送并在集线器上反序列化(您仍然需要模型反序列化。)
如果这些都不起作用,请留言,当我到达带有VS的电脑时,我会测试它们并分享结果。
希望这有帮助!祝你好运!