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);

唯一の問題はevtNewtonsoft.Json.Linq.JObject実際には型のインスタンスであるべきなのに、それが であることeventTypeです。

これを行うためのより良い方法、または少なくともこれを機能させるための解決策はありますか? 明らかに何かを見落としているような気がします - あまりにも長い間見つめていたのでしょうか?

よろしくお願いします。

4

1 に答える 1

3

eventType は非 null ですか? Type.GetType を呼び出すときは、型のアセンブリ修飾名が必要です。

于 2012-06-01T09:23:15.797 に答える