我正在使用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
是Newtonsoft.Json.Linq.JObject
,实际上它应该是eventType
类型的实例。
有更好的方法可以做到这一点,或者至少有一个解决方案来实现这个目标吗?我觉得我错过了一些明显的东西 - 也许我一直盯着它看太久了?
非常感谢提前。
答案 0 :(得分:3)
eventType是否为非null?调用Type.GetType时,需要类型的程序集限定名称。