EDIT2:找到解决方案,感谢Fabio。
标题有我在尝试填充XML文件时收到的错误消息。
这是一些代码
<!-- language: lang-vb -->
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:com.x.x"), _
System.Xml.Serialization.XmlRootAttribute("MT_AnalyseQueueResponse_EXT", [Namespace]:="urn:com.x.x", IsNullable:=false)> _
Partial Public Class DT_AnalyseQueue_EXT
Private resField As DT_AnalyseQueue_EXTRes
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Res() As DT_AnalyseQueue_EXTRes
Get
Return Me.resField
End Get
Set
Me.resField = value
End Set
End Property
End Class
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=true, [Namespace]:="urn:com.x.x")> _
Partial Public Class DT_AnalyseQueue_EXTRes
Private locationField() As DT_AnalyseQueue_EXTResLocation
'''<remarks/>
<System.Xml.Serialization.XmlElementAttribute("Location", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Location() As DT_AnalyseQueue_EXTResLocation()
Get
Return Me.locationField
End Get
Set(value As DT_AnalyseQueue_EXTResLocation())
Me.locationField = value
End Set
End Property
End Class
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="urn:com.x.x")> _
Partial Public Class DT_AnalyseQueue_EXTRes
Private locationField() As DT_AnalyseQueue_EXTResLocation
Private resultsField() As DT_AnalyseQueue_EXTResResultsCylinder
'<remarks/>
<System.Xml.Serialization.XmlElementAttribute("Location", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Location() As DT_AnalyseQueue_EXTResLocation()
Get
Return Me.locationField
End Get
Set(value As DT_AnalyseQueue_EXTResLocation())
Me.locationField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlArrayAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified), _
System.Xml.Serialization.XmlArrayItemAttribute("Cylinder", GetType(DT_AnalyseQueue_EXTResResultsCylinder), Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable:=False)> _
Public Property Results() As DT_AnalyseQueue_EXTResResultsCylinder()
Get
Return Me.resultsField
End Get
Set(value As DT_AnalyseQueue_EXTResResultsCylinder())
Me.resultsField = value
End Set
End Property
End Class
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="urn:com.xx.xx")> _
Partial Public Class DT_AnalyseQueue_EXTResLocation
Private noField As String
Private testpointField As String
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property No() As String
Get
Return Me.noField
End Get
Set(value As String)
Me.noField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Testpoint() As String
Get
Return Me.testpointField
End Get
Set(value As String)
Me.testpointField = value
End Set
End Property
End Class
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="urn:com.xxx.xx")> _
Partial Public Class DT_AnalyseQueue_EXTResResultsCylinder
Private detailField() As DT_AnalyseQueue_EXTResResultsCylinderDetail
Private dateField As String
Private batchNoField As String
Private resultField As String
Private infoField As String
Private bIDField As String
Private completeField As String
Private releaseField As String
'<remarks/>
<System.Xml.Serialization.XmlElementAttribute("Detail", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _
Public Property Detail() As DT_AnalyseQueue_EXTResResultsCylinderDetail()
Get
Return Me.detailField
End Get
Set(value As DT_AnalyseQueue_EXTResResultsCylinderDetail())
Me.detailField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property [Date]() As String
Get
Return Me.dateField
End Get
Set(value As String)
Me.dateField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property BatchNo() As String
Get
Return Me.batchNoField
End Get
Set(value As String)
Me.batchNoField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Result() As String
Get
Return Me.resultField
End Get
Set(value As String)
Me.resultField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Info() As String
Get
Return Me.infoField
End Get
Set(value As String)
Me.infoField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property BID() As String
Get
Return Me.bIDField
End Get
Set(value As String)
Me.bIDField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Complete() As String
Get
Return Me.completeField
End Get
Set(value As String)
Me.completeField = value
End Set
End Property
'<remarks/>
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Release() As String
Get
Return Me.releaseField
End Get
Set(value As String)
Me.releaseField = value
End Set
End Property
End Class
Public Sub()
Dim Mydet As New DT_AnalyseQueue_EXTResResultsCylinderDetail() With {.Component = "", .Limit = ""}
Dim MyresCy As New DT_AnalyseQueue_EXTResResultsCylinder() With {.BatchNo = "", .Detail = {Mydet}}
Dim Myloc As New DT_AnalyseQueue_EXTResLocation() With {.No = sLocNo, .Testpoint = sTestP}
Dim Myres As New DT_AnalyseQueue_EXTRes() With {.Location = {Myloc}, .Results = {MyresCy}}
Dim MyCylE As New DT_AnalyseQueue_EXT() With {.Res = Myres}
Dim MyXMLSerializerLoc As New XmlSerializer(GetType(DT_AnalyseQueue_EXT))
MyXMLSerializerLoc.Serialize(MyXMLWriter, MyCylE)
End Sub
sub中带有*标记的代码告诉显示错误消息的位置。 在我看来,定义可能是错误的,但实际上我认为DT_AnalyseQueue_EXTResLocation被定义为一个数组。 + 编辑:
所以我以Fabio建议的方式添加了信息和代码。 现在错误信息是 类型的值&#39; CustomProjectGlobal.DT_AnalyseQueue_EXTResResultsCylinder&#39;无法转换为CustomProjectGlobal的一维数组的一维数组.DT_AnalyseQueue_EXTResResultsCylinder&#39;
如果我没有实现该部分,序列化程序仍然会生成错误而没有XML文件。
答案 0 :(得分:1)
至少这段代码会抛出这种异常
.Location = New DT_AnalyseQueue_EXTResLocation() With {.No = sLocNo, .Testpoint = sTestP}
属性Location
是类型DT_AnalyseQueue_EXTRes
Private locationField() As DT_AnalyseQueue_EXTResLocation
Public Property Location() As DT_AnalyseQueue_EXTResLocation()
Get
Return Me.locationField
End Get
Set(value As DT_AnalyseQueue_EXTResLocation())
Me.locationField = value
End Set
End Property
来自MSDN Arrays in Visual Basic
您声明一个数组变量的方式与任何其他变量相同 使用Dim语句。 您可以使用类型或变量名称 一对或多对括号表示它将持有一个 数组而不是标量,它是包含单个变量的变量 值。
但您尝试分配DT_AnalyseQueue_EXTResLocation
尝试将您的行更改为下一行:
Dim loc As New DT_AnalyseQueue_EXTResLocation() With {.No = sLocNo, .Testpoint = sTestP }
Dim res As New DT_AnalyseQueue_EXTRes() With {.Location = {loc}}
Dim MyCylE As New DT_AnalyseQueue_EXT() With {.Res = res }
代码.Location = {loc}
将创建一个包含一个元素的数组,并将其分配给.Location
属性
对不起,根据我的意见,有时候一行代码可能无法读取
答案 1 :(得分:0)
你应该坚持今天早上的工作。我试图解决很多新的错误
Imports System.Xml
Imports System.Xml.Serialization
Module Module1
Sub Main()
End Sub
End Module
<XmlRoot("MT_AnalyseQueueResponse_EXT")> _
Partial Public Class DT_AnalyseQueue_EXT
Private resField As DT_AnalyseQueue_EXTResLocation
<XmlElement("DT_AnalyseQueue_EXTRes")> _
Public Property Res() As DT_AnalyseQueue_EXTResLocation
Get
Return Me.resField
End Get
Set(ByVal value As DT_AnalyseQueue_EXTResLocation)
Me.resField = value
End Set
End Property
End Class
<XmlRoot("DT_AnalyseQueue_EXTResLocation")> _
Partial Public Class DT_AnalyseQueue_EXTResLocation
Private locationField() As DT_AnalyseQueue_EXTResLocation
'''<remarks/>
<XmlElement("Location")> _
Public Property Location() As DT_AnalyseQueue_EXTResLocation()
Get
Return Me.locationField
End Get
Set(ByVal value As DT_AnalyseQueue_EXTResLocation())
Me.locationField = value
End Set
End Property
Private noField As String
Private testpointField As String
'<remarks/>
<XmlAttributeAttribute("No")> _
Public Property No() As String
Get
Return Me.noField
End Get
Set(ByVal value As String)
Me.noField = value
End Set
End Property
End Class
<XmlRoot("DT_AnalyseQueue_EXTResultsCyclinderDetail")> _
Partial Public Class DT_AnalyseQueue_EXTResultsCyclinderDetail
Private locationField() As DT_AnalyseQueue_EXTResLocation
Private resultsField() As DT_AnalyseQueue_EXTResResultsCylinder
'<remarks/>
<XmlElement("Location")> _
Public Property Location() As DT_AnalyseQueue_EXTResLocation()
Get
Return Me.locationField
End Get
Set(ByVal value As DT_AnalyseQueue_EXTResLocation())
Me.locationField = value
End Set
End Property
'<remarks/>
<XmlElement("Cylinder")> _
Public Property Results() As DT_AnalyseQueue_EXTResResultsCylinder()
Get
Return Me.resultsField
End Get
Set(ByVal value As DT_AnalyseQueue_EXTResResultsCylinder())
Me.resultsField = value
End Set
End Property
End Class
<XmlRoot("DT_AnalyseQueue_EXTResResultsCylinder")> _
Partial Public Class DT_AnalyseQueue_EXTResResultsCylinder
Private detailField() As DT_AnalyseQueue_EXTResultsCyclinderDetail
Private dateField As String
Private batchNoField As String
Private resultField As String
Private infoField As String
Private bIDField As String
Private completeField As String
Private releaseField As String
'<remarks/>
<XmlElement("Detail")> _
Public Property Detail() As DT_AnalyseQueue_EXTResultsCyclinderDetail()
Get
Return Me.detailField
End Get
Set(ByVal value As DT_AnalyseQueue_EXTResultsCyclinderDetail())
Me.detailField = value
End Set
End Property
'<remarks/>
<XmlAttribute("Date")> _
Public Property [Date]() As String
Get
Return Me.dateField
End Get
Set(ByVal value As String)
Me.dateField = value
End Set
End Property
'<remarks/>
<XmlAttributeAttribute("BatchNo")> _
Public Property BatchNo() As String
Get
Return Me.batchNoField
End Get
Set(ByVal value As String)
Me.batchNoField = value
End Set
End Property
'<remarks/>
<XmlAttribute("Result")> _
Public Property Result() As String
Get
Return Me.resultField
End Get
Set(ByVal value As String)
Me.resultField = value
End Set
End Property
'<remarks/>
<XmlAttribute("Info")> _
Public Property Info() As String
Get
Return Me.infoField
End Get
Set(ByVal value As String)
Me.infoField = value
End Set
End Property
'<remarks/>
<XmlAttribute("BID")> _
Public Property BID() As String
Get
Return Me.bIDField
End Get
Set(ByVal value As String)
Me.bIDField = value
End Set
End Property
'<remarks/>
<XmlAttributeAttribute("Complete")> _
Public Property Complete() As String
Get
Return Me.completeField
End Get
Set(ByVal value As String)
Me.completeField = value
End Set
End Property
'<remarks/>
<XmlAttribute("Release")> _
Public Property Release() As String
Get
Return Me.releaseField
End Get
Set(ByVal value As String)
Me.releaseField = value
End Set
End Property
End Class