2009-12-04 26 views
14

Sto scrivendo un metodo di estensione per l'analisi della stringa JSON per ogni tipo specificato. Volevo utilizzare il metodo sui tipi anziché le istanze come molti esempi che già conosciamo, ma in qualche modo ritengo che non sia supportato da Visual Studio. Qualcuno mi può illuminare qui? Quanto segue è il metodo:Come creare metodi di estensione per Tipi

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

voglio chiamare il metodo in questo modo:

var instance = MyClass.ParseJson(text); 

Grazie

+0

Si noti che 'ParseJson' restituisce un' Type' non un 'MyClass' con questa definizione. – dtb

+0

Grazie per la cattura. Ho effettivamente provato var instance = typeof (MyClass) .ParseJson (testo); non funziona – Codism

risposta

18

La risposta breve è che non si può fare; i metodi di estensione devono lavorare su un'istanza di qualcosa.

2

Non è possibile creare metodi di estensione applicabili al tipo stesso. Possono essere chiamati solo su istanze di un tipo.

+1

e istanze null di quel tipo che è uno dei valori riscattanti di ext. methods :) stringa val = null; val.IsNullOrEmpty() Sweet ... –

+0

sembra un bel trucco! – Codism

3

Per utilizzare il metodo di estensione, si dovrebbe fare:

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

Il token "MyClass" non è un tipo instamce intself, ma utilizzando typeof otterrà un tipo di operare su. Ma come è meglio di:

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

Edit: In realtà, il codice per il metodo di estensione ancora non avrebbe fatto quello che volevi. Restituirà sempre un oggetto "Tipo", non un'istanza di quel Tipo.

+0

La tua modifica è corretta Chris. Questo non ha funzionato per me. –

Problemi correlati