2011-07-19 42 views
0

我BaseClass的列表序列化BaseClass的名單沒有命名空間

Public Class Package 

    <XmlElement("OBJECT")> 
    Public List As List(Of baseobj) 
    Public Sub New() 
    List = New List(Of baseobj) 
    Dim f As New First() 
    Dim s As New Second() 
    List.Add(s) 
    List.Add(f) 
    End Sub 

    Function Serialize() As String 
    Dim XmlSerializer As New XmlSerializer(GetType(Package), "") 
    Dim NS As New XmlSerializerNamespaces() 
    Dim SB As New StringBuilder 
    Dim str As New StringWriter(SB) 
    NS.Add("", "") 
    XmlSerializer.Serialize(str, Me, NS) 
    Return SB.ToString 
    End Function 
End Class 

基類

<XmlInclude(GetType(First))> 
<XmlInclude(GetType(Second))> 
Public MustInherit Class baseobj 
    Public Common As String 
    Public Sub New() 
    Common = "_Common" 
    End Sub 
End Class 

而且掘進班

Public Class First 
    Inherits baseobj 
    <XmlAttribute("term")> 
    Public FirstAttr As String 

    Public Sub New() 
    MyBase.New() 
    FirstAttr = "FirstAttr" 
    End Sub 
End Class 

Public Class Second 
    Inherits baseobj 
    <XmlAttribute("term")> 
    Public SecAttr As String 

    Public Sub New() 
    MyBase.New() 
    SecAttr = "SecAttr" 
    End Sub 
End Class 

在序列化封裝對象(pkg.Serialize)有這樣的:

<?xml version="1.0" encoding="utf-16"?> 
<Package> 
    <OBJECT d2p1:type="Second" term="SecAttr" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance"> 
    <Common>_Common</Common> 
    </OBJECT> 
    <OBJECT d2p1:type="First" term="FirstAttr" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance"> 
    <Common>_Common</Common> 
    </OBJECT> 
</Package> 

我如何序列化到

<?xml version="1.0" encoding="utf-16"?> 
<Package> 
    <OBJECT Type="Second" term="SecAttr" > 
    <Common>_Common</Common> 
    </OBJECT> 
    <OBJECT Type="First" term="FirstAttr"> 
    <Common>_Common</Common> 
    </OBJECT> 
</Package> 

包對象沒有命名空間和前綴

回答

0

你不能做到這一點。 Type屬性從哪裏來?

d2p1:type(通常寫爲xsi:type)是一個衆所周知的屬性,用於傳達元素的實際類型。如果你能擺脫名字空間,那麼它就沒有意義了。

+0

很傷心。無論謝謝你的回覆。 –