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