. net中的XML序列化——这有什么问题?
本文关键字:什么 问题 XML 序列化 net 中的 | 更新日期: 2023-09-27 18:10:31
我有一个这样的xml:
<?xml version="1.0" encoding="utf-8"?>
<session xmlns="http://winscp.net/schema/session/1.0" name="blah@blah.com" start="2011-10-03T15:09:30.481Z">
<ls>
<destination value="/incoming/monthly" />
<files>
<file>
<filename value="2.txt" />
<type value="D" />
<modification value="2011-09-14T12:58:26.000Z" />
<permissions value="rwxr-xr-x" />
</file>
<file>
<filename value="3.txt" />
<type value="D" />
<modification value="2011-01-03T22:04:55.000Z" />
<permissions value="rwxr-xr-x" />
</file>
</files>
<result success="true" />
</ls>
</session>
我的陈述如下:
<XmlRoot("session", Namespace:="http://winscp.net/schema/session/1.0")>
Class XMLSession
<XmlElement("ls/files/file")>
Public Property FileList As New List(Of XMLFile)
End Class
<XmlType("file")>
Class XMLFile
<XmlElement("filename")>
Public Property FileName As XMLValueAttribute
<XmlElement("type")>
Public Property TypeName As XMLValueAttribute
<XmlElement("permissions")>
Public Property Permissions As XMLValueAttribute
<XmlElement("modification")>
Public Property ModificationDate As XMLValueAttribute
End Class
Class XMLValueAttribute
<XmlAttribute("value")>
Public Property Value As String
End Class
为什么XMLSession.FileList.Count总是0。我猜想它与上面的声明有关,但我不确定它有什么问题。也许它不能接受一条路,如果不能,我该怎么做呢?
不能用一个XmlElementAttribute描述多个层次的XML。
如果您不想手工构建这些类,您可以使用工具来完成:
假设您的XML保存在data.xml
:
xsd.exe data.xml
这将给出定义XML的data.xsd
。
xsd.exe /l:VB /n:SomeNamespace /c data.xsd
这将给你一个定义了类型的代码文件data.vb
,你可以把它添加到你的项目中。
这个的问题是这里描述的某种错误,当您围绕这个新类型创建序列化器时抛出错误。因此,您只需要对生成的代码进行一次手动调整,更改:
<XmlArrayItemAttribute("file", GetType(sessionLSFilesFile), IsNullable:=False)> _
'To
<XmlArrayItemAttribute("file", GetType(sessionLSFilesFile()), IsNullable:=False)> _