1

オブジェクトを返すメソッドを持つこのクラスを取得しました。

public class Deserializer<T>
{
    public static T FromJson(string json)
    {
        return new JavaScriptSerializer().Deserialize<T>(json);
    }   
}

そして、私はタイプを持っています。this 型に基づいて Deserializer クラスのインスタンスを作成するにはどうすればよいですか? 以下は明らかに機能しません。

var type = typeOf(MyObject);
var foo = Deserializer<type>.FromJson(json);
4

3 に答える 3

1

これはあなたがそれを行う方法ですが、絶対にこの方法で行う必要がない限り、正確には最適ではありません. 可能であれば、他の回答のいずれかを使用してください。

dynamic result = typeof(Deserializer<>).MakeGenericType(type)
    .InvokeMember("FromJson", BindingFlags.Public | BindingFlags.Static |
                              BindingFlags.InvokeMethod, null, null,
                  new [] { json });
于 2012-08-20T21:45:24.277 に答える
0

これはできません。ジェネリック型パラメーターは静的にバインドされます (コンパイル時)。System.Typeオブジェクトを渡すことはできません。

あなたの簡単な例では、(やや明らかに)単に使用できますMyObject

MyObject foo = Deserializer<MyObject>.FromJson(json);

これができるとしたら、結果の型は何にFromJsonなるでしょうか? そのオブジェクトをどのように使用しますか?

Type t = ___;  // How do you get this?
??? foo = Deserializer<t>.FromJson(json);   // What datatype is foo?

あなたがやろうとしていることは、C# のような静的に型付けされた言語の機能ではありません。これは、Python のような動的な言語機能であり、必要なものを返し、それに対して必要なことを行うだけです。

于 2012-08-20T21:33:08.760 に答える