我想将.net客户端(Xamarin Android)中的参数传递给中心服务器。 我通过方法“invoke”
在serverHub中调用server方法HubServer代码:
public class ConversationHub : Hub{
public void SendChatMessage(int conversationId, int messageId, string messageText, bool isChat, LinkViewModel link)
// logic in the method
}
}
我的实体
public class Message: Entity<int>
{
public string Url { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string ImgUrl { get; set; }
public virtual DetailMessage DetailMessage {get; set;}
}
我希望通过调用方法“调用”从.Net客户端传递给serverHub的对象(模型)。
public class LinkViewModel
{
public string Url { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string ImgUrl { get; set; }
public LinkViewModel(){}
public LinkViewModel(Message message){
Url = message.Url;
Title = message.Title;
Description = message.Description;
ImgUrl = message.ImgUrl;
} }
客户.Net代码(Xamarin Android):
var hubConnection = new HubConnection(hubUrl);
var chatHubProxy = hubConnection.CreateHubProxy("ConversationHub");
chatHubProxy.Invoke("SendChatMessage", 3, 0, "Hello world!", false, myObj); // I want to call method from HubConversation
但它 -
chatHubProxy.Invoke("SendChatMessage", 3, 0, "Hello world!", false, myObj);
不起作用,因为signalR不想传递复杂对象。如果我从客户端和服务器上的方法中删除参数“myObj”。方法调用将成功运行。 如何用对象参数调用方法“调用”?
此外,我在js:
中的UI中使用此serverHub方法(sendChatmessage)myHub.conversationHub.server.sendChatMessage(data.conversationId, data.messageId, data.messageText, data.isChat, JSON.parse(link));
链接表示UI中的LinkViewModel。 JS中的调用方法sendChatMessage没有任何问题,但是来自.Net客户端的问题。如何解决这个问题。
更新
此外,我尝试将myObj转换为Json(但它不起作用):
string jsonObject = JsonConvert.SerializeObject(myObj);// serialization myObj
var hubConnection = new HubConnection(hubUrl);
var chatHubProxy = hubConnection.CreateHubProxy("ConversationHub");
chatHubProxy.Invoke("SendChatMessage", 3, 0, "Hello world!", false, jsonObject); //pass object as json string, but it doesn't work
解决方案:
我解决了这个问题。 当我从.Net客户端调用方法“调用”时,第一个参数应该是对象,然后是基元,只是按此顺序(例如在我的情况下):
chatHubProxy.Invoke("SendChatMessage", myObj, 3, 0, "Hello world!", false);//firstly objects
之后,我在UI和Hub方法中更改了相应的顺序参数。并且所有代码都很好 - )