Получение типа объекта для передачи в метод, который принимает дженерики - PullRequest
1 голос
/ 22 августа 2011

Я могу написать это только в псевдокоде, так как не знаю правильный синтаксис. Если он есть.

У меня есть метод, который я хочу вызвать:

JsonConvert.DeserializeObject<Type>(string value);

Что бы вернуть данный тип.

Проблема в том, что я не знаю, как передать тип этому методу, так как я не буду знать тип во время сборки. Метод из моего контроллера MVC будет:

public JsonResult Save(string typeName, string model)
{
    // Insert your genius answer here.
}

Мне нужно иметь свой тип позже, чтобы я мог использовать DataContractSerializer для его хранения.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Вы можете использовать метод Type.GetType(). Он имеет перегрузку, которая принимает string имени типа, указанного в сборке, и возвращает соответствующее Type.

Ваш код будет выглядеть примерно так:

public JsonResult Save(string typeName, string model)
{
    // My genius answer here
    Type theType = Type.GetType(typeName);
    if (theType != null)
    {
        MethodInfo mi = typeof(JsonConvert).GetMethod("DeserializeObject");
        MethodInfo invocableMethod = mi.MakeGenericMethod(theType);
        var deserializedObject = invocableMethod.Invoke(null, new object[] { model });
    }
}
1 голос
/ 22 августа 2011

Если вы не знаете тип во время компиляции, вам придется использовать API Reflection для вызова метода.

На этот вопрос уже был дан ответ, см. Ответ Джона Скита на этот вопрос , например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...