Hmm, the class doesn't have a default constructor. I think that's it. You don't need a constructor which accepts a streaming info object because that's only required if you implement ISerializable :)
I'll try to dump some errors on purpose to see if it works here.
(edit)
Ok, another weird mistake in the .NET design. If a base class implements ISerializable, you have to override the constructor in your own class and pass the received parameters. Makes the [Serializable] attribute pretty limited and inconsistent: (sometimes you also have to implement an constructor, sometimes you don't etc..). If you're lucky, the constructor is private in the base class... (not here fortunately)
A little weird, but ok, nevertheless fixable
So in other words: you were right, the default constructor wasn't required.