2011-10-19 19 views
0

ジェネリックリストの中にスペースで区切られた文字列をデシリアライズ(明確にするため省略):私はこのように見える要素を持つXMLファイルを持っている

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

は、私は、XMLデシリアライズを使用して、次のクラスにこれをマッピングしたいのですが、実際のList(Of 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 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プロパティを持つことであると思うし、List<string>にRawTagsを解析しますが、シリアライザによって無視されます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()プロパティを作成できます。私はそれについて行くために滑らかな脱直列化の方法があるかどうかはわかりませんが、それは確かに動作します。

関連する問題