【发布时间】:2021-02-16 17:20:04
【问题描述】:
我尝试了几种不同的方法,但似乎无法将 XML 反序列化为类列表。这就是我的 XML 的样子:
<?xml version="1.0" encoding="utf-8"?>
<EmployeeDataList>
<EmployeeData>
<IsActive>true</IsActive>
<Id>123456</Id>
<FullName>JOHN SMITH</FullName>
</EmployeeData>
<EmployeeData>
<IsActive>true</IsActive>
<Id>998822</Id>
<FullName>BILL SMITH</FullName>
</EmployeeData>
</EmployeeDataList>
我总是得到员工列表的第一个节点,所以我的 .NET 代码如下所示:
Dim empDatas = xdoc.Elements("EmployeeDataList")
Dim xempDataList As XElement = empDatas(0)
Dim serXml As New XmlSerializer(GetType(List(Of EmployeeData)))
Dim empDataList As List(Of EmployeeData) = CType(serXml.Deserialize(xempDataList.CreateReader), List(Of EmployeeData))
Debug.Print("EmployeeDatas count={0}", empDataList.Count)
我的班级看起来像:
<Serializable>
Public Class EmployeeData
Public IsActive As Boolean
Public Id As String
Public FullName As String
End Class
这样的结果是异常
System.InvalidOperationException: There is an error in XML document (0, 0). ---> System.InvalidOperationException: <EmployeeDataList xmlns=''> was not expected.
只是不确定我哪里出错了。
【问题讨论】:
-
1.您的 XML 2 中没有根元素。每个 EmployeeDataList 之后都缺少一个
> -
那是一个错字。它已修复。
-
您有两个顶级元素。 XML 只能有一个根元素。您需要将这些
<EmployeeDataList/>s 包装在包含元素中,否则您的文档无法解析为 XML。或者,可以合并那些<EmployeeDataList/>元素的内容吗?看起来这就是您的代码所期望的。 -
我想我的意思是我可以得到第一个
块没问题。错误发生在 serXml.Deserialize 上。 -
它不是 XML,所以你不能将它反序列化为 XML。使其成为有效的 XML,然后您可以将其作为 XML 处理。
标签: .net vb.net list class deserialization