2014-04-09 2 views
0

Я пытаюсь десериализовать объект из базы данных, объект хранится в столбце как json, а затем де-сериализуется, дело в том, что я пытаюсь сделать общий метод и для этого, поэтому я также сохраняю в столбце тип десериализации.Deserциализация объекта с использованием объекта Type вызывает ошибку компиляции

Так что я хочу, чтобы получить тип через Type.GetType("mytype") и передать этот тип методу, когда важно передать этот тип.

Проблема заключается в том, что по какой-то причине визуальная студия не понимает этого systax и выделяет его как ошибка, или, может быть, я использую плохой подход, что я делаю:

string toDeserialize = "jsonObject"; 
JsonConvert.DeserializeObject<Type.GetType("customType")>(toDeserialize); 

И ошибка, Visual Studio бросает это:

Оператор '<' не может быть применен к операндам типа 'группы методов' и ' System.Type'

Что делать, чтобы решить эту проблему?

ответ

2

Общие параметры, предоставленные таким образом, должны быть известны во время компиляции. Если вы хотите вызвать этот общий метод с использованием типа, указанного во время выполнения, вы можете использовать отражение для генерации метода через MakeGenericMethod.

Но, к счастью, JsonConvert обеспечивает this non-generic overload в качестве альтернативы:

Type resultType = Type.GetType("customType"); 
object result = JsonConvert.DeserializeObject(toDeserialize, resultType); 
+0

Не правда, общие параметры типа могут быть назначены во время выполнения также с помощью отражения с помощью 'MakeGenericMethod'. – Haney

+1

@DavidHaney Исправить. Обновлено для уточнения. –

+0

Приятно знать вам обоим, стыдно, что сообщение об ошибке настолько неясное: s. –

Смежные вопросы