我的第一個問題在SO:,)和它的約爲XmlSerializer和命名空間問題。XmlSerializer +抽象類+派生類=無用命名空間
我知道已經有很多關於如何從Xml文件的根元素中刪除默認Xml名稱空間的主題,它不是主題。
我的問題是當你使用派生類時如何從子節點中刪除它?
我已經創建了自己的序列化程序,它可以接受自定義命名空間或簡單地忽略它們,它對於根元素來說工作得很好。
但是,當我使用抽象類列出列表中的某些派生類時,序列化插入2屬性位於每個派生類的節點中。
像這樣:
<root>
<elements>
<element p3:type="XmlDerivedClass" xmlns:p3="{schema_url}" >
</element>
</elements>
</root>
至於我的課:
// Root element
[XmlRoot("root", Namespace="")]
public class XmlRootElement
{
List<XmlBaseClass> _Elements;
}
// Base class
[XmlInclude(typeof(XmlDerivedClass))] // Mandatory, prevents serialization errors
[XmlRoot(Namespace="")]
public abstract class XmlBaseClass
// Derived class
[XmlRoot("element", Namespace="")]
public class XmlDerivedClass : XmlBaseClass
我嘗試了一些常見的解決方案:
- 使用命名空間= 「」 屬性
- 實施XmlNamespaceDeclarations財產(用正確的空命名空間)
- 從基地CLASE移動XmlRoot()派生一個
- 更改XmlRoot()到的XmlElement()
我會盡力在列表上添加XmlInclude標記以查看它是否改變了某些內容。
到目前爲止,沒有什麼工作,以消除那些該死的命名空間......
如果任何人有一個解決方案,我會很高興來試試吧。
[編輯21/02/2014] 好吧,似乎我是唯一一個面臨這個問題。我將使用一個簡單的字符串。替換刪除無用的XML,但這很髒。
PS:對於背景下,標籤是不是在另一端解析器一個問題,但不是在需要的時候,所以我正在尋找一種方法,以消除它們。
PS2:對不起,任何拼寫錯誤,英文不是我的母語。
我試着添加** [XmlArrayItem(「element」,Type = typeof(XmlDerivedClass))] **,但它解決了只有一個派生類的問題。 對於具有相同節點名稱的多個派生類,它不適用於此系統。 – Ethenyl