Итак, я просматривал нашу базу кода, и я видел, что некоторые наши DTO имеют комбинацию и соответствие атрибутов и [IgnoreDataMember]
.У меня нет атрибута [DataMember], у которого есть атрибут [IgnoreDataMember]
В прошлом нам сказали, что если мы не хотим что-то в сериализованном DTO, просто не добавляйте атрибут [DataMember]
. Затем я увидел другой атрибут и сделал некоторые копания, и кажется, что это явно указывает, что свойство не будет сериализовано.
Теперь мой вопрос: что лучше? Добавление [IgnoreDataMember]
или ничего не добавляет.
Я спросил, и кажется, что [IgnoreDataMember]
- это дни, когда все было сериализовано, и вам пришлось диктовать то, что следует игнорировать (я верю в .Net 2). Затем они изменили его на обратное, и вам нужно было четко указать, что ДОЛЖНО быть сериализовано. Теперь кажется, что вы можете сделать то и другое.
также, согласно MS: «Атрибут IgnoreDataMemberAttribute выполняется только при использовании с немаркированными типами»; если вы используете '[DataContract]' и '[IgnoreDataMember]' в том же классе, последний игнорируется. –
@MichaelEdenfield, чтобы быть педантичным, 'DataContractSerializer' по умолчанию имеет * все общедоступные поля и свойства * (публичные поля очень редки); и даже это немного неоднозначно. Например, если мы говорим о 'NetDataContractSerializer', то по умолчанию он имеет * все поля * (публичные и частные), но нет свойств –
Я знаю, что это старый поток, но вчера я столкнулся с проблемой, которая указывает, что г-н Эденфилд сказал не совсем так. У меня есть класс с одним полем и 4 свойствами. Все 4 свойства преобразуют некоторую форму данных (например, байтовый массив, строка или другие) и записывают его в одно поле. Я пометил класс атрибутом DataContract и пометил только поле как DataMember. Однако таким образом десериализатор НЕ игнорировал свойства, но устанавливал их по умолчанию (что бы переписать это поле). Добавление [IgnoreDataMember] к свойствам исправило проблему. Поэтому он не игнорируется –