【问题标题】:Deserializing a space delimited string into a Generic List将空格分隔的字符串反序列化为通用列表
【发布时间】:2011-10-19 15:28:35
【问题描述】:

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

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

我想使用 Xml 反序列化将其映射到以下类,但我找不到将 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

有没有办法覆盖默认的反序列化?

【问题讨论】:

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


    【解决方案1】:

    我认为最简单的做法是拥有一个被序列化的 RawTags get/set 属性,以及一个将 RawTags 解析为 List&lt;string&gt; 但被序列化程序忽略的 Tags readonly 属性:

    <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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-08
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        相关资源
        最近更新 更多