이전에이 문제를 겪은 사람이 있습니까? 제네릭 클래스 내에서 대리자를 사용하여 제네릭 메서드를 호출하는 메서드가 있습니다. 클래스를 Serializable로 표시하고 불만없이 직렬화합니다. 그러나이 클래스의 객체를 deserialize하려고하면 CPU가 멈춰서 컴퓨터가 중단됩니다.일반 클래스 내에서 일반 메서드를 호출하는 대리자는 역 직렬화 중에 CPU를 페그합니다.
코드 예제 : 나는 다시 기계 스파이크에 CPU를의 ViewState에서 개체를 추출하려고 할 때 (예를 들어)의 ViewState에이 클래스의 잘 인스턴스를 넣을 수 있지만,
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;
}
}
및 deserialization 호출은 절대 반환되지 않습니다 (즉, 무한 루프).
ToListItems() 메서드를 제거하면 모든 것이 훌륭하게 작동합니다. 이게 정말 이상한가요? 아니면 직렬화를 이해하지 못합니까? =)
안녕하세요 감사합니다. 내 게시물을 편집하여 동일한 문제를 제공하는 클래스의 간단한 버전을 표시하고 제안 사항을 포함 시켰습니다. 나는 여전히 이상하다고 생각한다.) – Badjer