我有一個C#結構的類,其中包含一個抽象基類和從此抽象類派生的各種類。在派生類中使用C#xmlserializer,同時控制生成的XML元素
[System.Xml.Serialization.XmlInclude(typeof(B))]
public abstract class A {
...
}
[Serializable]
[XmlType("typename")]
public class B : A {
...
}
此外,我使用的是B類的實例中的另一C類爲像這樣與它的抽象類型的字段:
public class C {
...
public A myItem { get; set; } //A is actually of type B
...
}
現在,當我通過標準序列化我的C級XmlSerializer的,我得到一個XML結構是這樣的:
<C>
<myItem p2:type="typename" xmlns:p2="...">
... //Fields as elements and stuff
</myItem>
</C>
但那不是我所需要的,因爲我把那些序列化C對象的REST web服務(沒有有效的模式還)。我真正需要的是這樣的:
<C>
<typename>
... //Fields as elements and stuff
</typename>
</C>
但是,正如你可以在上面看到,XmlSerializer的似乎在通過XmlType將設置類型名稱偏愛實例字段名。另外,很顯然,我不能僅僅在C中使用XmlElement(「typename」),因爲我不知道該字段將包含的抽象類的具體實現。
有沒有人有過類似的問題,並可以爲我提供解決方案?或者我是否真的需要在我的類A中實現IXmlSerializable,並因此在所有具體的A派生類中實現這個工作?
編輯:剛剛發現,當閱讀一些文章,IXmlSerializable不讓我控制包裝元素,所以我實際上需要實現接口在類C與某種switch()的類型myItem成員?
感謝您的幫助!
最好的問候, FLO
謝謝,但我實際上認爲已經通過指定XmlInclude屬性來完成......但它似乎完全沒有這個工作...以我需要在類C中存儲特定於類B的信息的價格。 ..但我認爲這是我不得不爲這些東西使用有效模式而付出的代價... – flo 2010-11-26 13:05:13