2009-12-04 73 views
14

我正在編寫解析任何給定類型的JSON字符串的擴展方法。我想在類型上使用這個方法,而不是像許多我們已經知道的例子那樣的實例,但是我有些覺得它不被Visual Studio支持。有人能在這裏啓發我嗎?以下是方法:如何爲類型創建擴展方法

public static T ParseJson<T>(this T t, string str) where T: Type 
{ 
    if (string.IsNullOrEmpty(str)) return null; 
    var serializer = new JavaScriptSerializer(); 
    var obj = serializer.Deserialize<T>(str); 
    return obj; 
} 

我要打電話以這種方式方法:

var instance = MyClass.ParseJson(text); 

感謝

+0

請注意,'ParseJson'返回一個'Type'而不是'MyClass'這個定義。 – dtb 2009-12-04 17:24:50

+0

感謝您的收穫。我其實嘗試過var instance = typeof(MyClass).ParseJson(text);不工作 – Codism 2009-12-04 18:04:49

回答

18

簡短的回答是無法做到的;擴展方法需要處理某個事物的實例。

2

您不能創建適用於類型本身的擴展方法。它們只能在類型的實例上調用。

+1

和該類型的空實例,這是ext的兌換值之一。方法:) string val = null; val.IsNullOrEmpty() 甜... – 2009-12-04 21:09:19

+0

看起來像一個整潔的黑客! – Codism 2013-05-16 18:07:57

3

要使用的擴展方法,你就必須做到:

var instance = typeof(MyClass).ParseJson(text); 

令牌「MyClass的」不是一個類型instamce intself,但使用typeof將讓你一個類型進行操作。這是怎麼回事任何優於:

var instance = JsonUtility.ParseJson<MyClass>(text); 

編輯:其實,對於擴展方法的代碼仍然不會做你想要的。它將始終返回一個「類型」對象,而不是該類型的一個實例。

+0

你的編輯是正確的Chris。這對我不起作用。 – 2010-04-28 14:13:55