2011-10-19 27 views
0

我有一個看起來像這樣的元素的XML文件(簡稱爲清楚起見):反序列化空間分隔字符串轉換爲泛型列表

<post id="1" tags="tag1 tag2 tag3 tag4" /> 

我想這個映射使用XML反序列化下面的類,但我無法找到將標籤屬性映射到實際列表(字符串)的方法。

<Serializable()> _ 
<XmlRootAttribute("post")> _ 
Public Class Post 
Private m_id As Integer 
Private m_tags As String 

<XmlAttribute("id")> _ 
Public Property Id() As Integer 
    Get 
     Return m_id 
    End Get 
    Set(ByVal value As Integer) 
     m_id = value 
    End Set 
End Property 

'<XmlAttribute("tags")> _ 
Public Property Tags() As List(Of String) 
    Get 
     Return m_tags 
    End Get 
    Set(ByVal value As List(Of String)) 
     m_tags = value 
    End Set 
End Property 
End Class 

是否有任何方法可以重寫默認的反序列化?

回答

2

我認爲最簡單的辦法是有一個RawTags的get/set屬性,該屬性被序列化,並解析RawTags到List<string>但得到由串行忽視的Tags只讀屬性:

<Serializable()> 
    <XmlRootAttribute("post")> 
    Public Class Post 
    Private m_id As Integer 
    Private m_tags As String 

    <XmlAttribute("id")> 
    Public Property Id() As Integer 
     Get 
      Return m_id 
     End Get 
     Set(ByVal value As Integer) 
      m_id = value 
     End Set 
    End Property 

    <XmlAttribute("tags")> 
    Public Property RawTags() As String 
     Get 
      Return m_tags 
     End Get 
     Set(ByVal value As String) 
      m_tags = value 
     End Set 
    End Property 

    <XmlIgnore> 
    Public ReadOnly Property Tags() As List(Of String) 
     Get 
      Return m_tags.Split(" ").ToList() 
     End Get 
    End Property 
    End Class 
0

我可能是錯的,但反序列化器只會將它看作一個字符串,與「tag1tag2tag3tag4」一樣。我不知道你可以通過分隔符反序列化成一個列表。

您可以將該屬性序列化爲變量,然後通過將字符串拆分成數組然後創建數組,然後通過array.ToList()創建Tags()屬性。我不確定是否有一種光滑的反序列化方式去實現它,但那肯定會起作用。