vb.net - VB.NET通过属性文本反序列化XML子节点
问题描述
尝试反序列化 XML 文件但遇到子节点问题。我需要通过那里的 ID 值来收集这些,例如 ConNum、class、recid。目前我可以取回一个值,但它给了我 ID 的名称而不是值。例如:xData.TRAN_DATEX.theTarget = ConNum 我需要 20190910 代替。
这是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<targets>
<target id="ConNum">20190910</target>
<target id="class">Third</target>
<target id="recid">123 </target>
</targets>
这是我的课:
Imports System.Xml.Serialization
<Serializable, XmlRoot("targets")>
Public Class XmlFile
<XmlElement("target")> Public Property TRAN_DATEX As myTarget
End Class
<Serializable, XmlRoot("target")>
Public Class myTarget
<XmlAttribute("id")> Public theTarget As String
End Class
这是反序列化方法:
Dim fFile As FileInfo = New FileInfo("C:\Temp\TARGETS.metadata")
Dim s As New XmlSerializer(GetType(XmlFile))
Using sr As New StreamReader(fFile.FullName)
xData = s.Deserialize(sr)
Stop
End Using
解决方案
theTarget
正在获取id
属性的值。你想要XmlText
那个元素的:
<Serializable, XmlRoot("target")>
Public Class myTarget
<XmlAttribute("id")> Public theTarget As String
<XmlText> Public Property theValue As String
End Class
然后,xData.TRAN_DATEX.theTarget
您可以使用xData.TRAN_DATEX.theValue
编辑:回应评论。
由于有多个<target>
元素,TRAN_DATEX
因此需要一个列表:
<Serializable, XmlRoot("targets")>
Public Class XmlFile
<XmlElement("target")> Public Property TRAN_DATEX As New List(Of myTarget)
End Class
LINQ 可用于访问所需的数据:
Dim reqValueTarget = xData.TRAN_DATEX.FirstOrDefault(Function(x) x.theTarget = "ConNum")
If reqValueTarget IsNot Nothing then
Dim reqValue = reqValueTarget.theValue
End If
推荐阅读
- node.js - nodejs从会话中删除变量
- javascript - 如何从 JavaScript 中的 Set 中删除对象
- mysql - 无法重新启动 mysql(有关详细信息,请参阅“systemctl status mysql.service”和“journalctl -xe”。)
- jquery - 从 jquery-1.11.1.js 迁移到 jquery-1.12.4.js
- google-chrome-extension - 如何在不打开空选项卡的情况下从扩展程序启动自定义 URI?
- spring-boot - 使用 JpaRepository 将 protobuf 直接保存为实体
- php - 使用 ajax 序列化文件(图像)并插入查询
- c# - 在数据网格上插入 PersianDate 时出错:无法评估表达式,因为当前线程处于堆栈溢出状态
- c# - 用于显示图像管理器对话框的 Enterprise Architect API
- android - Clang:在 libc++ 中使用 std::Map 时,复制赋值运算符被删除