If you are using Cache.putAsync() you may find your object is modified after serialization starts, thus corrupting the datastream passed to readExternal. To solve this, make sure you synchronize access to the object.
You can read more about this issue in this forum thread.