2013-02-28 56 views
0

這是一個後續問題:錯誤序列化繼承財產在.NET 4.5

Serialization breaks in .NET 4.5

我在這是造成我的悲傷中的序列化的.NET 4.5的遺留代碼的屬性。

這是屬性:

[EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    private new object Value 
    { 
     get 
     { 
      return base.Value; 
     } 
     set 
     { 
      base.Value = value; 
     } 
    } 

這可能是引入試圖隱藏基類的「值」屬性。 到目前爲止,唯一的解決方案是讓 讓序列化程序知道我想在.NET4中序列化。 但這對我來說是個問題。 (只有在.NET 4.5安裝在Traget計算機上時,才應該設置此配置,否則會引發異常)。

我想我可以一起刪除屬性,但由於我正在處理一個龐大而複雜的遺留系統,我不知道副作用可能是什麼。

所以我quesion是雙重的:

  1. 爲什麼inhertied財產中斷.net 4.5序列化?

  2. 如果我刪除繼承的屬性,我應該期待什麼討厭的副作用?

回答

1

作爲優素福回答上related post

在4.5,XmlSerializer的執行用一個不依賴於C#編譯器代替。雖然它提供了更好的啓動性能和穩定性,但您可能會遇到實現之間的兼容性問題。

使用legacySerializer的配置設置不適用於4.0機器,因爲對應的強類型Xml配置節類不包含此設置的佔位符。

這兩個問題都將在即將到來的更新中解決。在此之前,您可以通過在4.5中將配置開關設置爲4.0來解決該問題。

+0

謝謝。如果我將編譯類型更改爲4.5,這是否可行?因爲在這種情況下,舊版本的標記將無濟於事,因爲這是在4.5版本中編譯的4.0否 – 2013-03-14 18:30:55

+0

如果您在4.5運行時運行4.5/4.0目標應用程序,則此開關運行良好。但是,如果您在純4.0機器上運行4.0目標應用程序,交換機將失敗。但是,如果您在純4.0運行時運行應用程序,則不需要此配置開關,因爲您的解串器在此處已經正常工作。所以你只需要根據你的機器的運行時間有條件地配置這個配置開關。 – Praburaj 2013-03-14 19:07:23