将空格分隔的字符串反序列化为通用列表

时间:2011-10-19 15:28:35

标签: .net xml vb.net serialization xml-serialization

我有一个xml文件,其元素看起来像这样(为了清晰起见缩写):

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

我想使用Xml Deserialization将它映射到下面的类,但我找不到将tags属性映射到实际List(Of String)的方法。

<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 个答案:

答案 0 :(得分:2)

我认为最简单的方法是使RawTags获取/设置属性进行序列化,并使用Tags只读属性将RawTags解析为List<string>,但会被忽略序列化器:

<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

答案 1 :(得分:0)

我可能错了,但反序列化器只会将其视为字符串,与“tag1tag2tag3tag4”相同。我不知道您可以通过分隔符反序列化到列表中。

您可以将属性序列化为变量,然后通过拆分为数组的字符串然后使用array.ToList()创建Tags()属性。我不确定是否有一种灵活的反序列化方法可以解决它,但这肯定会奏效。