I was reading Microsoft's Best Practices: Data Contract Versioning, and they state:
Do not remove data members in later versions, even if the IsRequired property was left at its default property of false in prior versions.
Can anyone suggest any reason for this? They don't elaborate. Since they say it's fine to add data members in a later version, it seems that removing would be fine too -- effectively, the older version would see it as an add.
The difference, I suppose, is that you're supposed to add new members at the end (using the Order property on the DataMemberAttribute), whereas the property getting removed would probably not be at the end. But they also say that missing members will be left at their default value during loading, so it's clear that missing members are OK.
What am I missing? What version-interop problems would I cause (both forward-compatibility and backward-compatibility) if I obsoleted a feature of my product and removed the [DataMember] property that goes with it?
Also, if I decided that I wasn't interested in forward-compatibility (i.e., if I wasn't concerned about older versions opening newer files), would any such problems still apply?