【问题标题】:Deserializing elements and arrays反序列化元素和数组
【发布时间】:2012-01-06 17:44:20
【问题描述】:

我在将 XML 反序列化到我的班级时遇到问题。在将数组 det 放入类之前,它工作正常。

我在反序列化发生后(data = Ctype(...))放了一个手表,我可以看到所有信息都正确加载(ide,emit,dest)除了det 元素: nItem=1 属性已加载的 det,但 nItem=2 属性已加载的 det不是。

使用手表,我可以看到对象被加载为单个变量,而不是我在属性声明中指定的向量

有什么建议吗?谢谢!

下面是点击按钮时发生反序列化的地方:

Protected Sub btnDes_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDes.Click
        Dim data As New nf

        'DeSerializacao XML
        Dim Deserializer As New Serialization.XmlSerializer(GetType(nf))
        Dim DataFile As New FileStream(Server.MapPath("App_Data\pedro.xml"), FileMode.Open, FileAccess.Read, FileShare.None)

        data = CType(Deserializer.Deserialize(DataFile), nf)
        DataFile.Close()
        DataFile.Dispose()

 End Sub

以下是我的 XML 代码的一部分

<NF>
                <iNF>
                        <ide>
                                <cUF>31</cUF>                           
                        </ide>
                        <emit>                          
                                <xNome>Tradimaq  Ltda - MG</xNome>                              
                        </emit>
                        <dest>                          
                                <xNome>GEMAQUINAS LTDA</xNome>                          
                        </dest>
                        <det nItem="1">
                                <prod>
                                        <cProd>3.04.000000109</cProd>                                   
                                </prod>                         
                        </det>
                        <det nItem="2">
                                <prod>
                                        <cProd>3.01.580048839</cProd>                                   
                                </prod>

                        </det>

                </iNF>          
</NF>

下面是我为接收反序列化而创建的类的一部分:

Public Class NF

    Public Property iNF As infNFe

    Public Sub New()


    End Sub

End Class
------------------------------------------------------------------------
Public Class iNF


    Public Sub New()

    End Sub

    Public Property ide As ide
    Public Property emit As emit
    Public Property avulsa_info As avulsa
    Public Property dest As dest

    Public Property det() As det


End Class
------------------------------------------------------------------------
Public Class det    

    <XmlElement("prod")> Public Property prod As prod

    Public Sub New()


    End Sub

End Class


Public Class prod

    Public Property cProd As String   

    Public Sub New()

    End Sub

End Class
------------------------------------------------------------------------

Public Class ide
    Public Property cUF As String
End Class

------------------------------------------------------------------------

Public Class emit
    Public Property xNome As String
End Class

------------------------------------------------------------------------

Public Class dest
    Public Property xNome As String
End Class

------------------------------------------------------------------------

【问题讨论】:

  • 我没有收到您的代码。是什么语言?解析 XML 的逻辑在哪里?
  • 对不起...将编辑它。它是用 VB.net 编写的

标签: xml vb.net arrays deserialization


【解决方案1】:

改变这一行:

Public Property det() As det

进入这个:

<XmlElement("det")> Public Property det As det()

虽然我不确定为什么使用 XmlElementAttribute 会起作用,而忽略它会失败。

注意

Property det() as det 

不是 det 数组的属性,括号用于参数列表,在这种情况下为空。对于数组的属性,您必须将括号放在末尾:

Property det As det()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多