我有一個使用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」,即Type的類型? – dcg
它確實,但我需要序列化它,然後反序列化它 –
[MSDN](https://msdn.microsoft.com/en-us/library/w3f99sx1(v = vs.110).aspx)for該重載狀態的typeName是**「要獲得的類型的程序集限定名稱」。**因此,原則上應該沒有任何問題。順便說一句,我不知道超載,我想你每天都會學到新的東西:) – dcg