2016-03-01 29 views
0

請考慮以下情形。我們有一個定義技術文檔交換格式的XSD文件(一個根類型由幾個complexTypes組成)。
此外,還有一個規範定義了每個字段的值範圍和格式。XmlSerializer:XSD生成的類序列化問題

顯然,兩個文檔都是由不同的部門創建的,因爲格式的定義是不同的。例如。

  • XSD:時間是由XML類型表示時間XmlSerializer格式:HH:MM:SS.FFF
  • 規格文檔:以下格式必須用於時間HH:mm

技術上講,事情很簡單。我們使用XSD.exe來生成類。但是現在輸出文件在使用XmlSerializer後看起來不同。沒有機會就格式進行談判,因爲它是由於影響整個市場的規則而產生的,因此也影響了很多交易對手。

正如我們必須假設的那樣,規範文檔的格式需要得到尊重。所以我一直在尋找可以確保這一點的選項。

  1. 添加和實現IXmlSerializable接口受影響complexTypes的生成的類。
    不幸的是,這不是一個選項,因爲XmlSerializer的初始化引發了一個異常:「有反映類型的錯誤。」
    或者有什麼辦法可以避免這種情況?實現根類型的接口不是一種選擇,因爲它非常大且複雜。
  2. 找到一個序列化庫,其中可以提供某種類型的格式映射,以便可以實現字段中的自定義格式。
    現在,我沒有找到像這樣的東西。但也許有人可以給我提示。
  3. 序列化後通過XPathNavigator修改節點的字符串內容。
    不是最好的方法,但它會完成這項工作。
  4. 在生成輸出中直接修改生成的類並添加一些代理屬性。
    實際上不是最好的想法,因爲重新生成(由於新版本的XSD文件)會覆蓋所有修改。不幸的是,屬性不能在partial class中重新定義,對吧?

我已經按照首選項的順序排列了列表。

所以我錯過了一個選項?你會走哪條路?

我知道這不是典型的如何使用class xyz問題,但我仍然希望,你可以給我提示,通常如何處理這樣的場景。

回答

0

由於巨大反饋,我決定去與選項3

原因很簡單。我們仍然可以使用XSD.exe的標準類代,並保留XmlSerializer類的所有優點。

欲瞭解更多信息,請參閱MSDN中的article。流程非常簡單。

  1. 給定的路徑
  2. 讀值無類型(串)選擇節點,並使用所需的格式解析預期類型的​​對象
  3. 寫類型化從類型對象值

我們已經測試了它已經和它的魅力一樣。