Подтвердить что ты не робот

Отсутствие атрибута [DataMember] и наличие атрибута [IgnoreDataMember]

Итак, я просматривал нашу базу кода, и я видел, что некоторые наши DTO имеют сочетание и соответствие атрибутов [DataMember] и [IgnoreDataMember].

В прошлом нам сказали, что если мы не хотим что-то в сериализованном DTO, просто не добавляйте атрибут [DataMember]. Затем я увидел другой атрибут и сделал некоторое копирование, и кажется, что это явно указывает, что свойство не будет сериализовано.

Теперь мой вопрос, что лучше? Добавляем [IgnoreDataMember] или ничего не добавляем.

Я спросил, и кажется, что [IgnoreDataMember] происходит от тех дней, когда все было сериализовано, и вам пришлось диктовать то, что следует игнорировать (я верю в .Net 2). Затем они изменили его на обратное, и вам нужно было четко указать, что ДОЛЖНО быть сериализовано. Теперь кажется, что вы можете сделать и то, и другое.

4b9b3361

Ответ 1

Я спросил, и кажется, что [IgnoreDataMember] - это дни, когда все было сериализовано, и вам нужно было диктовать, что следует игнорировать (я верю в .Net 2). Затем они изменили его на обратное, и вам нужно было четко указать, что ДОЛЖНО быть сериализовано.

Собственно, это не совсем так; IIRC он всегда был следующим:

  • если он отмечен как [DataContract], тогда считаются только те элементы, которые помечены [DataMember]
  • если он не помечен как [DataContract], тогда он по умолчанию использует все, но вы можете вычитать элементы с помощью [IgnoreDataMember]

Обычно я просто опускаю [DataMember] вещей, которые я не хочу сериализовать, но во многом [IgnoreDataMember] более явственно - в основном в интересах сопровождающего. В нем говорится: "Я намеренно не сериализую это", а не "возможно, я знаю, что это не сериализуется, но, возможно, я просто забыл добавить атрибут".

Либо все будет работать.