2010-08-12 6 views
10

오늘이 문제를 해결하고 코드 정리를 수행 할 때 R #이 SerializableAttribute로 장식 된 클래스에서 자동 입력란으로 속성을 변환하지 않는다는 것을 알 수있었습니다.Resharper는 Serializable 클래스의 자동 속성으로 자동 변환되지 않습니다. 그렇습니까?

using System; 

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

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

위 코드는 자동 코드 정리 중에는 변경되지 않습니다. 물론 수동으로이 작업을 수행 할 수 있으며 R #의 빠른 작업 메뉴 옵션을 사용하여 개별 속성 수준에서 수행 할 수 있습니다. 하지만 [Serializable] 클래스에서 자동 속성을 사용할 때 알지 못하는 근본적인 문제가 있는지 궁금합니다.

JetBrains forum thread에서 우리는이 문제가 논의 된 an issue을 언급했지만 확실하게 해결되지는 않았습니다.

+0

"빠른 실행 메뉴"를 사용하여 작업을 수행 할 수 있다고 말합니다. 옵션은 존재하지 않습니다. 그리고 serializable 속성을 제거하면 모든 것이 정상입니다. – Samuel

답변

11

대부분의 직렬화 메커니즘이 필드 이름을 사용하여 직렬화 된 데이터를 복원하기 때문에 객체를 직렬화 할 때 필드 이름 등이 중요하게 시작됩니다. 이제 필드 이름을 변경하면 이전 직렬화 된 버전을 올바르게 읽을 수 없습니다.

자동 속성으로 변환 할 때 배경 필드에는 이전 이름과 일치하지 않는 자동 생성 이름이 있습니다. 따라서 이전 직렬화 된 데이터를 읽을 때 잠재적 인 문제점이 발생합니다.

이 함정을 피하는 것으로 가정합니다. 클래스가 직렬화 가능으로 표시된 경우 R #이 자동 등록 정보로 자동 변경되지 않습니다.

+0

동일한 DLL에서 직렬화 및 비 직렬화 된 개체에 문제가 없다고 생각합니다. 백업 필드는 DLL 내에서 정적으로 정의됩니다. 그게 유효한 가정입니까? – arootbeer

+1

자동 속성 및 직렬화로 설명한이 문제에 대해서는 본 적이 없습니다. R # 버그를 읽었습니다. https://youtrack.jetbrains.com/issue/RSRP-63531 여기에 제시된 증거가 제시되어 있지 않습니다. 재현 가능한 프로젝트는 어디에 있습니까? 이 문제가 CLR1 및 CLR2에서 다시 발생 했습니까? 나중에 CLR 2 업데이트 또는 CLR 4에서 수정 되었습니까? –

+0

정말 고마워요. 이러한 유형의 기능을 웹 사이트에 문서화하는 것이 좋을 것입니다. – Samuel

관련 문제