2009-12-04 18 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'は、この定義を持つ' MyClass'ではなく 'Type'を返します。 – dtb

+0

キャッチをありがとう。私は実際にvar instance = typeof(MyClass).ParseJson(text);を試しました。 – Codism

答えて

18

短い答えは、それを行うことができないです。拡張メソッドは何かのインスタンスを処理する必要があります。

2

タイプ自体に適用される拡張メソッドを作成することはできません。それらは型のインスタンスに対してのみ呼び出すことができます。あなたがしなければならないでしょう

+1

とそのタイプのヌルインスタンスは動作しません。これはextの値を使用しています。メソッド:)文字列val = null; val.IsNullOrEmpty() 甘い... –

+0

はきちんとしたハックのようです! – Codism

3

拡張メソッドを使用するには、:

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

トークン「MyClassのは、」タイプinstamceのintselfではなく、typeof演算を使用すると、あなたの上で動作するタイプを取得します。しかし、これよりもどのように優れているのですか?

編集:実際には、拡張メソッドのコードは依然としてあなたが望むことをしません。それは常に、そのTypeのインスタンスではなく、 "Type"オブジェクトを返します。

+0

あなたの編集は正しいChrisです。これは私にとってはうまくいかなかった。 –

関連する問題