メッセージを保存するためにJSONを使用するメッセージキューと、タイプ別にキーを設定するメッセージ受信者があります。私はキューから項目を追加および削除するには、これらのメソッドを持っている:.NETでジェネリック型への参照を保存するにはどうすればよいですか?
public void AddToQueue<T>(T message)
{
var msg = JObject.FromObject(message);
msg["_type"] = typeof(T).AssemblyQualifiedName;
notificationQueue.PushBack(msg.ToString());
}
public void DispatchFromQueue()
{
var notification = notificationQueue.PopFront();
if(notification != null)
{
var jobj = JObject.Parse(notification);
var type = Type.GetType(jobj["_type"].Value<string>());
var msg = JsonConvert.DeserializeObject(notification, type);
// handle message
}
}
私はこれらがstring
またはMyCustomClass
のように、通常のタイプのために働くだろうと信じています。しかし、私はMyGenericClass<T>
のようなジェネリック型、またはClassA<ClassB<ClassC>>
のような狂ったケースでは失敗すると思います。
汎用パラメータが組み込まれた型名を取得/解決する標準的な方法はありますか?そうでない場合、私は手動でこれをどのように行うことができますか?
'.GetType'は、型を表す' Type'、つまり型の型を取得しませんか? – dcg
ですが、シリアル化して後で逆シリアル化する必要があります –
[MSDN](https://msdn.microsoft.com/en-us/library/w3f99sx1(v = vs.110).aspx)forそのオーバーロードはtypeNameが** "取得する型のアセンブリ修飾名"であることを示しています。**したがって、原則として問題はありません。ところで、私はそのオーバーロードを知らなかった、あなたは毎日何か新しいことを学ぶと思う:) – dcg