我正在設計VB.net中的一些複雜類(但您可以在C#中編寫您的答案,如果您願意:P),其中包含必須從XML加載的數據。當然,顯而易見的解決方案是設計一個可序列化的類,以便自動化加載過程。是否可以在.net中執行「混合」XML序列化?
現在,我的問題如下:XML結構是固定的,我不能改變它,它有一些令人討厭的序列化。下面是一小片的DTD,更好地說明問題的例子:
<!ELEMENT Relationship (AttributePairs | AscendCaption | DescendCaption | ErrPreventInsertOrUpdateChild | ErrPreventDeleteParent | ErrPreventUpdateParent |ExtendedProperties |HiddenProperties)* >
<!ATTLIST Relationship
CountAggregates CDATA #IMPLIED
CountReplicates CDATA #IMPLIED
OnParentUpdate (PreventIfChildren|UpdateChildren) #IMPLIED
OnParentDelete (PreventIfChildren|DeleteChildren|NullChildrenForeignKey) #IMPLIED
IsEnforce (True|False) #REQUIRED
OnChildInsertOrUpdate (PreventIfNoParent|InsertParentIfNone) #IMPLIED
ChildRoleName CDATA #IMPLIED
ParentRoleName CDATA #IMPLIED
ParentAttributeGroupInstance CDATA #IMPLIED
ChildAttributeGroupInstance CDATA #IMPLIED
>
<!--Lots of other sutff not needed for this example -->
正如你可以看到,上述所有屬性可以很容易地通過剛剛宣佈了相應的屬性,並與<XmlAttribute()>
標籤裝飾它序列化。 不測:
IsEnforce(TRUE | FALSE)#REQUIRED
由於真假不在XML(由於資本T與F)與序列化進程將無法有效的布爾值。
現在...我知道的唯一的其他選擇是手動實現IXMLSerializable,這是我爲其他類所做的工作,但它也意味着我必須手動讀取每個屬性/元素,即使是那些我可以輕鬆地用標籤自動序列化的。
所以,最後,我的問題:是否有可能混合這兩種方法?即:自動序列化與標籤,然後「步入」手動讀取更「棘手」的價值觀? (布爾只是一個例子,假設我想手動讀取隨意某些屬性)bool
型
可能欺騙所以,你必須與非法值的XML DTD? – StingyJack 2010-11-09 21:20:43
XML非常嚴格。如果你是「xml」需要無效的xml,那麼它不是xml ...所以你可能會想要一個預處理器來處理這些問題,並保持你的* actual * XML操作很簡單 – STW 2010-11-09 21:26:16
@StingyJack:nope,in DTD你可以做你想做的事,那個DTD的設計者(我沒有設計它)決定使用True和False。但是在.NET中用於序列化的XSchema標準更加嚴格,只允許「真」和「假」作爲有效的布爾值。 這裏的問題是我已經有了XML,並且它本身不是「不正確的」......關鍵是我必須適應它以滿足我的需求,並且在類中我需要一個布爾值,所以我必須以某種方式閱讀它作爲布爾值,即使對於DTD它只是一個枚舉屬性 – 2010-11-09 21:30:24