Newtonsoft.Json:DeserializeObject(字符串值,Type类型)返回JObject

时间:2012-06-01 09:09:37

标签: c# .net json serialization json.net

我正在使用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);

唯一的问题是evtNewtonsoft.Json.Linq.JObject,实际上它应该是eventType类型的实例。

有更好的方法可以做到这一点,或者至少有一个解决方案来实现这个目标吗?我觉得我错过了一些明显的东西 - 也许我一直盯着它看太久了?

非常感谢提前。

1 个答案:

答案 0 :(得分:3)

eventType是否为非null?调用Type.GetType时,需要类型的程序集限定名称。