我有一个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
有没有办法覆盖默认的反序列化?
答案 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()属性。我不确定是否有一种灵活的反序列化方法可以解决它,但这肯定会奏效。