Вот (часть) простой метод десериализации, который я использовал в .NET 2.0 в течение многих лет. T
- параметр неограниченного типа.
protected virtual T ItemFromString(string s) {
if (typeof(T).IsPrimitive ||
typeof(T) == typeof(string)) {
try {
// needed for string, too: compiler doesn't allow (T)s
return (T)Convert.ChangeType(s, typeof(T));
}
catch (Exception ex) {
// stuff
}
}
}
Я изменил пул приложений для запуска в 4.0, и все было хорошо - пока я не развернул его на удаленном сервере. Там я получаю «Операция может дестабилизировать время выполнения» на линии
return (T)Convert.ChangeType(s, typeof(T));
(На самом деле указанная строка является конечной скобкой метода, но я сузил ее до этой строки.)
Проблема исчезнет, если я вернусь к версии 2.0.
Обе версии: 4.0.30319
. Приложение в остальном идентично, включая web.config
. Оба приложения используют общие пулы приложений и работают в режиме полного доверия. Предположительно другой параметр влияет на это, но я понятия не имею, как выяснить, что.
Все, что я нашел об этом, включает Reflection.Emit
или ковариацию, которой я не пользуюсь.
Есть ли отведения?
Спасибо.