2010-08-12 16 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

你說你可以使用「快速操作菜單」來完成這項工作。該選項只是不存在。當我刪除可序列化的屬性時,一切都很好。 – Samuel 2016-12-22 15:53:30

回答

11

在序列化對象時,字段名等開始很重要,因爲大多數序列化機制都使用字段名來恢復序列化數據。現在,當您更改字段名稱時,無法正確讀取較早的序列化版本。

當您轉換爲自動屬性時,後備字段將具有自動生成的名稱,該名稱與舊名稱不匹配。因此,當讀取舊的序列化數據時,這會引起潛在的問題。

我假設爲了避免這個陷阱,如果該類被標記爲可序列化,R#不會自動將其更改爲自動屬性。

+0

我認爲這不會是一個問題,從同一個DLL序列化和反序列化的對象 - 支持字段將在DLL中靜態定義。這是一個有效的假設嗎? – arootbeer 2010-08-16 14:37:43

+1

我從來沒有遇到過使用自動屬性和序列化描述的這個問題。我已經閱讀了R#bug https://youtrack.jetbrains.com/issue/RSRP-63531其中,這是否沒有證據顯示這在行動?可重複項目在哪裏?這是CLR1中的一個問題嗎?CLR2中的問題是在CLR 2更新版本還是CLR 4中修復的? – 2016-02-12 17:20:21

+0

非常感謝。在他們的網站上記錄這種類型的功能會很好。 – Samuel 2016-12-22 16:02:39