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

Resharper не автоматически конвертирует в авто свойства в классах Serializable - должен ли я?

Сегодня я столкнулся с этой проблемой и смог определить, что при очистке кода R # не будет преобразовывать свойства из резервных полей в автоматические свойства в классах, которые украшены атрибутом SerializableAttribute, например.

using System; 

namespace DataContracts
{
    [Serializable]
    public class Class1
    {
        private bool _wontChange;

        public bool WontChange
        {
            get { return _wontChange; }
            set { _wontChange = value; }
        }
    }
}

При автоматическом очистке кода этот код не будет изменен. Конечно, я могу сделать это вручную, и у меня все еще есть опция быстрого действия из R #, чтобы сделать это на уровне отдельных свойств. Но мне стало интересно, есть ли основная проблема, о которой я не знаю, в использовании свойств auto в классах [Serializable].

В форуме форума JetBrains мы ссылаемся на проблему, в котором обсуждается эта проблема, но она, по-видимому, не решена окончательно.

4b9b3361

Ответ 1

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

Когда вы конвертируете в auto-properties, в поле поддержки будет создано автоматически сгенерированное имя, которое не соответствует старому имени. Поэтому это может вызвать потенциальную проблему при чтении старых сериализованных данных.

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