我正在使用 SignalR 接收类型名称和 Json,目前我通过在服务器上使用管道符号连接时相对天真地实现了它:
var ctx = GlobalHost.ConnectionManager.GetConnectionContext<MyConnection>();
ctx.Connection.Broadcast(message.GetType().FullName + "|" + JsonConvert.SerializeObject(message));
在客户端,我试图反序列化回正确的类型,但当然不能使用任何通用方法,JsonConvert
所以我想出了这个:
var pipePos = eventMessageString.IndexOf("|", StringComparison.Ordinal);
var typeName = eventMessageString.Substring(0, pipePos);
var eventJson = eventMessageString.Substring(pipePos + 1);
var eventType = Type.GetType(typeName);
var evt = JsonConvert.DeserializeObject(eventJson, eventType);
唯一的麻烦是它evt
是 a Newtonsoft.Json.Linq.JObject
,而实际上它应该是该eventType
类型的一个实例。
有没有更好的方法来做到这一点,或者至少有一个解决方案来让它发挥作用?我觉得我错过了一些非常明显的东西——也许我已经盯着它看太久了?
提前谢谢了。