I think we should raise on bad data, not just skip the content.  Both JSON and YAML do this: run 'em on something bad, and they throw.  Adding an error for this ensures that corruption will be detected.

I am undecided about "extra" fields in the data, though: I tend to prefer to just ignore them, but that would be a lossy operation here.  If we have unsynchronised code and schema, we could destroy user data.  It might be better to refuse to create the object in that case.

(You could also version the serialized data, and use that to ensure we decode sanely, if you thought that was more useful.)