2

我正在使用 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类型的一个实例。

有没有更好的方法来做到这一点,或者至少有一个解决方案来让它发挥作用?我觉得我错过了一些非常明显的东西——也许我已经盯着它看太久了?

提前谢谢了。

4

1 回答 1

3

eventType 是非空的吗?调用 Type.GetType 时,您需要该类型的程序集限定名称。

于 2012-06-01T09:23:15.797 回答