Иметь класс dataContract с необязательным датамембером.
[DataMember(EmitDefaultValue = false)]
public int salary = 0;
Сериализатор DataContract игнорирует такой элемент, когда значение по умолчанию.
Рекомендация MSDN:
Установка свойства EmitDefaultValue в false не рекомендуется. Это следует делать только в том случае, если в этом есть особая необходимость, например, для обеспечения совместимости или уменьшения размера данных.
У вас также есть свойство IsRequired в DataMember, которое устанавливает его в false и EmitDefaultValue, что помогает сократить издержки транспорта и сериализации.