. 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。我猜想它与上面的声明有关,但我不确定它有什么问题。也许它不能接受一条路,如果不能,我该怎么做呢?

. net中的XML序列化——这有什么问题?

不能用一个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)> _