Resharper не преобразует автоматически в свойства авто в сериализуемых классах - я должен? - PullRequest
11 голосов
/ 12 августа 2010

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

using System; 

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

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

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

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

1 Ответ

12 голосов
/ 12 августа 2010

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

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

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

...