Apart from the pains of viewstate in and of itself, the [Serializable] attribute can have disadvantages in doing precisely what it is intended to do, when inappropriate.
One case is if a class would need custom serialisation. Say perhaps it has readonly members (and it's a good idea to make members readonly until they need to be otherwise, for similar reasons as it's a good idea to make them private until they need to be otherwise), then custom serialisation will be needed and without it [Serializable] makes a promise that can't be fulfilled.
Another case is if the members contain sensitive data. If you just put [Serializable] on the class without customising the serialisation then while it will work, it will leak that sensitive data.