If your classes are immutable, then all the internal fields are determined by the constructor arguments, hence you only need to serialize the constructor arguments. I created my own custom XML code to serialize my classes based on their constructor arguments. That may be slightly more work, but I had a reason for it.
Note that there are a lot of alternatives – I suspect a dozen major options, and lots more minor ones. So as @nafg says, more requirements would be helpful. (Eg, do you prefer binary or JSON? Do you care about whether it is standards-based? Does it need to be compatible with external systems? Is this serialization for wire transport or persistence? Do you need schema evolution?)