Я также использую DataMemberAttribute.EmitDefaultValue = false
в некоторых местах, чтобы попытаться ограничить объем передаваемых данных. В моем случае я контролирую как клиентскую, так и серверную стороны, поэтому у меня нет проблем с этим.
Я нашел ссылку на потенциальный конфликт с DataMemberAttribute.IsRequired
, о котором я раньше не знал:
Взаимодействие с IsRequired
... Если IsRequired установлен в
true , (который указывает, что значение должно присутствовать) и
EmitDefaultValue имеет значение false (что означает, что значение не должно
присутствовать, если для него установлено значение по умолчанию), значения по умолчанию для этого
элемент данных не может быть сериализован, потому что результаты будут
противоречат друг другу. Если для такого элемента данных установлено значение по умолчанию
(обычно ноль или ноль) и попытка сериализации,
Исключение SerializationException.
Обычно это не должно быть проблемой, потому что как только вы попытаетесь сериализовать объект с членом, отмеченным EmitDefaultValue = false
, IsRequired = true
и значением по умолчанию, вы получите SerializationExeception
, поэтому проблема очень очевидно (я только что проверил). Тем не менее, я мог видеть ситуации, когда EmitDefaultValue
равен false
, а через некоторое время IsRequired
установлен на true
, что создает проблемы (мы надеемся, что они попали в тестирование до развертывания изменения).
Еще одна возможная проблема с этой комбинацией: клиент может отправлять данные со значением по умолчанию, и это будет десериализовано без проблем. Ваша служба может затем сохранить ее в базе данных, а затем попытаться отправить ее обратно, что приведет к исключению.
С учетом всего вышесказанного, я думаю, что вы используете настройку по конкретным причинам, указанным в документации. Просто знайте о потенциальном конфликте с IsRequired
.