2010-04-26 54 views
2

基本上,最初的問題是我需要將布爾值序列化爲0或1。我找到的解決方案是實現IXmlSerializable,我這樣做。不幸的是,我想要序列化的類是從模式生成的代碼,並且它上面有一個XmlTypeAttribute。當我嘗試(反)序列與以通常的方式(new XmlSerializer(type))創建XmlSerializer的對象,它拋出這個異常:在具有XmlTypeAttribute的生成類上實現IXmlSerializable

System.InvalidOperationException: Only XmlRoot attribute may be specified for the type ______ Please use XmlSchemaProviderAttribute to specify schema type.

兩個選項浮現在腦海中立刻:

1)刪除屬性在生成的代碼中。 每次代碼重新生成時都必須進行此更改。

2)在創建序列化程序以刪除屬性時使用XmlAttributeOverrides對象。這需要代碼庫的其餘部分「知道」它需要重寫該屬性。而且,拋出的異常絕對不知道需要做些什麼來修復它。

兩個選項有點臭。有第三種選擇嗎?

+1

_why_它有'[XmlType]'屬性嗎? – 2010-04-28 05:56:41

+0

這就是Xsd2Code生成它的方式。說我使用的模式是一個巨大的野獸是輕描淡寫。 Xsd.exe和其他工具使用自定義庫崩潰或吐出40mb的代碼。 由於其他原因,我最終不得不修改生成的代碼。但是,如果解決此問題的第三種方法可能適用於另一方。 – 2010-04-28 17:40:48

回答

0

我有同樣的問題,對於我刪除IXMLSerializable作品,我不使用它,並試圖用屬性中的某些邏輯隱藏真或假?像這樣:

private bool mblnFlag; 

public String Flag 
{ 
    get 
    { 
     return mblnFlag; 
    } 
    set 
    { 
     mblnFlag = (value == "1") 
    } 
} 

當然,你應該加強屬性和做更多的檢查,但這就是主意。

+0

我通過評論XmlTypeAttribute來解決我的問題,但修改生成的代碼感覺很髒,我希望有第三個選項不涉及修改生成的代碼。 我可能只是在做夢:( – 2010-05-03 13:16:11

相關問題