vb.net - VB.NET 反序列化/我应该使用哪种模式?
问题描述
我想以对象形式映射给定的 XML。XML包括例如文件路径之类的值。典型路径由文件夹路径的 xml 属性和文件名组成。该模式应该让我有机会随时加载和保存对象。我不想总是手动将文件路径放在一起或将它们分开。(我不想更改原始的序列化对象(例如“katalog”、“kovkatalog”),因为它是自动生成的。)
我认为继承可以解决我的问题并提高我的代码的可概览性(或者我应该使用其他包装器吗?)。有什么反对这种方法的吗?有没有更好的方法?
反序列化时,总是返回以下错误:
“InvalidOperationException:http://example.net/V3.0/Schema'> 不是预期的。”
有没有人可以解决如何使用其他方法扩展继承?
VB.NET 代码:
Namespace abc
Public Class Main
Public Sub New()
Dim des As New unifa_katalog
des = Deserialisieren(Of unifa_katalog)("<PATH_TO_FILE>\katalog.xml")
End Sub
Private Function Deserialisieren(Of T)(strSpeicherOrt As String) As T
Dim serializer As New XmlSerializer(GetType(T))
Dim deserialized As T = Nothing
Using file = System.IO.File.OpenRead(strSpeicherOrt)
deserialized = DirectCast(serializer.Deserialize(file), T)
End Using
Return deserialized
End Function
End Class
<XmlRoot("katalog", [Namespace]:="urn:kosxmlns")>
Partial Public Class unifa_katalog
Inherits katalog
Public Sub furtherMethod()
End Sub
End Class
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432"),
System.SerializableAttribute(),
System.Diagnostics.DebuggerStepThroughAttribute(),
System.ComponentModel.DesignerCategoryAttribute("code"),
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://example.net/V3.0/Schema"),
System.Xml.Serialization.XmlRootAttribute([Namespace]:="http://example.net/V3.0/Schema", IsNullable:=False)>
Partial Public Class katalog
Inherits kovkatalog
End Class
Partial Public Class kovkatalog
Private verfahrenField As String
Private verfahrensversionField As String
Private katalogversionField As Integer
Private myversionField As String
Public Sub New()
MyBase.New
Me.katalogversionField = 1
End Sub
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()>
Public Property verfahren() As String
Get
Return Me.verfahrenField
End Get
Set
Me.verfahrenField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute("verfahrens-version")>
Public Property verfahrensversion() As String
Get
Return Me.verfahrensversionField
End Get
Set
Me.verfahrensversionField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute("katalog-version"),
System.ComponentModel.DefaultValueAttribute(1)>
Public Property katalogversion() As Integer
Get
Return Me.katalogversionField
End Get
Set
Me.katalogversionField = Value
End Set
End Property
'''<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute("my-version")>
Public Property myversion() As String
Get
Return Me.myversionField
End Get
Set
Me.myversionField = Value
End Set
End Property
End Class
End Namespace
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<kov:katalog verfahren="kov" my-version="03000200" katalog-version="1" verfahrens-version="06090000" xmlns:kov="http://example.net/V3.0/Schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</kov:katalog>
解决方案
这不是真正的继承问题,而是命名空间问题。如果您使用相同的命名空间,它将反序列化
<XmlRoot("katalog", [Namespace]:="http://example.net/V3.0/Schema")>
Partial Public Class unifa_katalog
Inherits katalog
Public Sub furtherMethod()
End Sub
End Class
推荐阅读
- modelica - 如何为具有参数数组的连接器定义对话框
- r - as.Date 给我 NA
- node.js - 以 sudo 运行 Electron 应用程序时出错
- mongodb - 如何将mongodb字段转换为子文档字段?
- docker - 在 docker 中找不到无服务器
- javascript - “npm install”没有安装任何库。如何解决这个问题?
- java - 除法后如何获得超过25位小数?
- google-chrome-extension - 内容脚本中的“web_accessible_resources”图像在 chrome 89.0.4389.82 中不起作用
- reactjs - React Redux 在 axios 响应之前渲染应用程序
- powershell - 目标机器上的 PowerShell -TFS 任务,在远程服务器中更改执行策略后安全警告仍然存在