如何将一个类从Android发送到Signaler
试图通过SignalR将一个类实例从Android发送到.NET核心站点并返回 Android类:(LatLng是定义为“双纬度,双经度”的谷歌地图api) 信号员呼叫:如何将一个类从Android发送到Signaler,android,.net,signalr,Android,.net,Signalr,试图通过SignalR将一个类实例从Android发送到.NET核心站点并返回 Android类:(LatLng是定义为“双纬度,双经度”的谷歌地图api) 信号员呼叫: fun SendPosition(group:String,position:OtherPosition){ hubConnection.send("SendPosition","Something",position) } 收到: hub
fun SendPosition(group:String,position:OtherPosition){
hubConnection.send("SendPosition","Something",position)
}
收到:
hubConnection.on("ReceivePosition", { x ->
Log.d("SignalR: Receive Position","$x ")
}, OtherPosition::class.java)
在服务器上-
C级:
Hub接收消息并回显,但在Android端,接收到的位置的所有字段均为空。看起来问题出在嵌套类上——如果我用两端的两个字符串替换LatLng字段,那么所有这些都可以工作。关于如何修复或调试此问题的任何建议?AFAICS服务器收到的实际值是一个JsonElement。signer确实将其反序列化为所需类的实例,但在发送时没有序列化它。简单的修复方法是使用对象而不是类名:
public async Task Sendposition(string groupid, object position)
{
// This line only if we need access to object:
Position op = JsonSerializer.Deserialize<Position>(position.ToString());
await Clients.All.SendAsync("ReceivePosition", position);
}
public class Position
{
public int uid { get; set; }
public LatLng LatLng {get;set;}
public long Time { get; set; }
public string UserName { get; set; }
public string UserId { get; set; }
}
public class LatLng
{
public double latitude { get; set; }
public double longitude { get; set; }
}
public async Task Sendposition(string groupid, object position)
{
// This line only if we need access to object:
Position op = JsonSerializer.Deserialize<Position>(position.ToString());
await Clients.All.SendAsync("ReceivePosition", position);
}
public async Task SendPosition(string groupId, Position position)
{
//Modify position here then:
JsonElement root = JsonDocument.Parse(JsonSerializer.Serialize(position)).RootElement;
await Clients.All.SendAsync("ReceivePosition", root);
}