Почему массив XML не десериализуется в базовом объекте - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть два класса, документы и класс документов. Оба имеют атрибуты. Когда я пытаюсь десериализовать класс документов, я получаю атрибут и значения элемента, но массив документов пуст. Если я десериализую документы, используя root в качестве документов, я получу правильный массив документов, но, конечно, не атрибут или элемент из документов. Есть ли какой-то моджах, которые мне не хватает в классе документов, чтобы он получал массив документов?

    Public Class document

    &ltSystem.Xml.Serialization.XmlAttribute("ID")&gt
    Public ID As Integer
    Public docType As String

End Class

Public Class documents

    &ltSystem.Xml.Serialization.XmlAttribute("maxID")&gt
    Public maxID As Integer
    &ltSystem.Xml.Serialization.XmlArrayItem("document")&gt
    Public docs() As document
    Public docGroup As String

End Class


Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim _XML As String = "
&ltdocuments maxID=""12345""&gt
 &ltdocument ID=""33333""&gt
  &ltdocType&gtDoc1&lt/docType&gt
 &lt/document&gt
 &ltdocument ID=""44444""&gt
  &ltdocType&gtDoc2&lt/docType&gt
 &lt/document&gt
 &ltdocGroup&gtAny&lt/docGroup&gt
&lt/documents&gt"

        Dim _ms As New MemoryStream()
        Dim _sw As New StreamWriter(_ms)
        _sw.Write(_XML)
        _sw.Flush()
        _ms.Position = 0

        Dim _ser1 As New System.Xml.Serialization.XmlSerializer(GetType(documents))
        Dim _ser2 As New System.Xml.Serialization.XmlSerializer(GetType(document()), New System.Xml.Serialization.XmlRootAttribute("documents"))

        Dim docs As documents
        Dim doc() As document
        Dim obj As Object

        _ms.Position = 0
        docs = _ser1.Deserialize(_ms)  '; Gets attribute and element but no document array
        _ms.Position = 0
        doc = _ser2.Deserialize(_ms)   ' Gets document array just fine
    End Sub
End Class

Любая помощь будет принята с благодарностью.

...