Sure -- you can do this by adding your addresses one at a time and checking to see whether you have exceeded your limit. (Save each "still good" string and revert if needed). Creating the full JSON text and removing addresses one by one from the last address is another alternative ... but the logic might be more difficult.
If you hit the size limitation rarely, you could use the following strategy:
- Serialize the Person object
- if within limits return
- Otherwise recreate the person object with one less address, reserialize and check
- repeat as neccessary.