Well, to be perfectly honest, I did struggle finding a good Json serializer before. It's only a no-brainer now that I know how to use it
If that can help you, I'm using the
Unity port of Newtonsoft's Json.NET, works for most if not all platforms. Unity's own classes can't be directly serialized, but Json.NET allows you to write custom converters for types like Vector3, etc (some people might have written such serializers already).
Protobuf is more "complex" than Json, and I don't use it for the same purpose... Json is good for storing player settings and simple data, and things that the knowledgeable user might want to tweak using a text editor.
Protobuf, on the other hand, is good for storing raw binary data. It's not human-readable, but is very optimized for things like networking. In another project I used it for real-time download of heavy data from a server, it's really efficient.