You can serialize any entity by setting all their properties and relationships from private to protected.
You could have a common issue with symfony2, even if you have set all properties to protected: You have to re-generate the proxies of those entities you have changed. To do so, simply clear the cache. For dev enviroment:
It works even if "it contains many foreign objects and even ArrayCollections of foreign entities" as you said.