0

我在我的SDK(幾何),它的序列化其成員的基類。一些成員只是簡單的屬性&元素像字符串,而其他元素是用戶定義的類的數組。現在,我需要適應工作流程中的變化,這會導致基類成爲父類的子類,這意味着XML層次結構也會發生變化。而且,我也想重新命名一些屬性/元素。如何更改屬性,類的層次當一個類被序列化

但是,那些用以前的SDK代碼(類層次結構)序列化的XML呢?如何將這些XML反序列化到新的SDK中?

<Geometry Type"Test" IsAssessed="False"> 
    <Name>Sample Geometry</Name> 
    <LengthA>69</LengthA> 
    <LengthB>87</LengthB> 
    <LengthC>50</LengthC> 
     <Points> 
      <Point X="1537308.5" Y="16030594.72" Z="1000"> 
       <IsTracked>false</IsTracked> 
      </Point> 
      <Point X="1537308.5" Y="16030594.72" Z="900"> 
       <IsTracked>false</IsTracked> 
      </Point> 
      <Point X="1536601.21" Y="16028954.3" Z="-5670.6"> 
       <IsTracked>false</IsTracked> 
      </Point> 
     </Points> 
</Geometry> 

所以,可以說改變之後,一個類被引入,其名稱是計算器,它有一個幾何集合。但我想重命名幾何,並重命名它的一些元素/屬性。並添加/刪除屬性。

我該如何去解決這個問題,以便我以前的XML能夠成功地反序列化。

回答

0

看看Version Tolerant Serialization

這允許您添加標記(OptionalField,OnDeserializing等)來說明XML結構中的更改。

或者,如果它是一次性的,您可以反序列化到舊版本,然後實現轉換代碼以更新到新版本。如果這是經常發生的事情,這可能會很難維持。

如果您可以選擇更改,則某些序列化格式在版本控制方面比XML更靈活,例如Protocol Buffers

+0

如果我反序列化成舊版本然後進行轉換,這意味着我將不得不保持原始幾何類的原樣,並使用不同的名稱複製它,並在反序列化時從原始轉換爲新的。是對的嗎? – WAQ 2015-03-03 07:16:19

+0

這是正確的。這就是爲什麼我說如果不僅僅是一次性的話,要維持這種方法是非常困難的。 – RagtimeWilly 2015-03-03 07:17:28

相關問題