Кто-нибудь еще сталкивался с этой проблемой раньше? У меня есть метод, который вызывает универсальный метод с делегатом внутри универсального класса. Я пометил класс как Serializable, и он сериализуется без жалоб. Но когда я пытаюсь десериализовать объект этого класса, он привязывает процессор и зависает на компьютере.
Пример кода:
public delegate T CombinationFunctionDelegate<T,U,V>(U a, V b);
[Serializable]
public class SDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
public SDictionary()
: base()
{
}
protected SDictionary(SerializationInfo info, StreamingContext context)
: base(info, context)
{}
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
}
public List<ListItem> ToListItems()
{
return Convert(delegate(TKey key, TValue value)
{
return new ListItem(key.ToString(), value.ToString());
});
}
public List<U> Convert<U>(CombinationFunctionDelegate<U, TKey, TValue> converterFunction)
{
List<U> res = new List<U>();
foreach (TKey key in Keys)
res.Add(converterFunction(key, this[key]));
return res;
}
}
Я могу поместить экземпляр этого класса в ViewState (например) очень хорошо, но когда я пытаюсь извлечь объект из ViewState снова, ЦП на машине пикирует, и вызов десериализации никогда не возвращается (т. Е. Бесконечный цикл) .
Когда я удаляю метод ToListItems (), все прекрасно работает. Это действительно странно, или я просто не понимаю сериализации? =)