Has anyone else run into this problem before? I’ve got a method that calls a generic method with a delegate, inside of a generic class. I’ve marked the class as Serializable, and it serializes without complaint. But, when I try to deserialize an object of this class, it pegs the CPU and hangs the machine.
Code example:
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; } }
I can put an instance of this class into ViewState (for example) just fine, but when I try to extract the object from ViewState again, the CPU on the machine spikes and the deserialization call never returns (ie, infinite loop).
When I remove the ToListItems() method, everything works wonderfully. Is this really weird, or do I just not understand serialization? =)
Are you using VS2008 SP1? There’s a known problem with SP1.
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361615