В чем разница между [дополнительным полетом] и [несущественным

StackOverflow https://stackoverflow.com/questions/2586507

  •  24-09-2019
  •  | 
  •  

Вопрос

Я наткнулся на этот вопрос по трансскандере:

Что вы должны подать заявку на поле, если его значение не требуется во время десериализации?

Мне = [несерьезно], ответ = [дополнительное поле

Моя кишечная реакция была несерьезной, но трансправитель говорит, что я не прав. У меня есть хорошая идея, что касается атрибута [Nonseralized], но все же мне очень хотелось, чтобы это было очищено.

Насколько я могу сказать, у первых есть отношения с конфликтами для версий между новыми и более старыми версиями той же сборки. Последнее больше обеспокоена нереализацией поля FullStop. Есть ли что-нибудь еще, что может устроить эти два части? MSDN на самом деле не говорит о том, что они оба используются на двоичных показателях и SOAPFORMatter с XMLFormatter, используя XMLIGRAETTRIBUTE.

Мой второй вопрос, можете ли вы смешивать и соответствовать одному из двух атрибутов? Я еще не использовал их.

Просто бросил этому туда, но у меня есть что-то связано с тем, как реализован интерфейс IDeserilizationCallback?

ОБНОВИТЬ:

Я знаю, что необязательный атрибут поля не сериализует значение, удерживаемое элементом данных, но несерьезным, даже нереализации не будет даже сериала для элемента данных или его значение.

Это было полезно?

Решение

Эти два атрибута используются для противоположных сторон уравнения сериализации.

Когда вы используете [NonSerialized], Вы говорите: «Это поле не должно быть сериализовано вообще» - так что это скорее атрибут «Экономьте время». По сути, вы говорите, что поле не имеет значения для сериализованного состояния объекта.

Когда вы используете [OptionalField], С другой стороны, вы все еще собираетесь сериализовать поле. Однако, если поле отсутствующий в Время Читать (Когда поток десериализируется в объект), то исключение не будет повышено. Этот атрибут действительно предназначен, чтобы позволить вам добавить новое поле в существующий сериализуемый тип, не нарушая совместимость. Старые версии объекта (которые отсутствуют на том, что поле) будут десериализированы нормально.

Другие советы

Просто играть с английского языка, не требуется а также необязательный значит то же самое в этом случае.

Для вашего первого вопроса вы в значительной степени прибили его по голове. [OptionalField] В основном позволяет более старыми сериализациями совместимы с более новыми определениями. [NonSerialized] означает, что вы не найдете его в сериализованных данных.

Учитывая различия, я не могу представить, почему вы поставили как на одном поле, но я думаю, что компилятор будет жаловаться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top