Универсальный десериализатор XML, в котором xml имеет атрибуты в элементе - PullRequest
0 голосов
/ 01 февраля 2019

Я использую VB.Net

У меня есть общий метод десериализации XML, подобный так

Public Function Deserialize(xml As String) As T
        Dim result As T = Nothing

        If Not String.IsNullOrEmpty(xml) Then
            Dim tr As IO.TextReader = New IO.StringReader(xml)
            Dim reader As XmlReader = XmlReader.Create(tr)
            Dim serializer As XmlSerializer = New XmlSerializer(GetType(T))
            If serializer.CanDeserialize(reader) Then
                result = CType(serializer.Deserialize(reader), T)
            End If
        End If

        Return result
    End Function

Я хотел бы десериализовать следующий XML

  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
    <apiResponse version="1.0">
    <areaOfControlResponse>
    <aocs>
    <aoc id="5840" name="ABE" address="BS16 2PX, United Kingdom"/>
    <aoc id="7626" name="MAIN" address="Willow Bed Close 45, BS16 XXX, United Kingdom"/>
    <aoc id="7629" name="test" address="X Road, BS16, United Kingdom"/>
    </aocs>
    </areaOfControlResponse>
    </apiResponse>

Я создал объект, подобный этому

Imports System.Xml.Serialization
Namespace AreaOfControlResponseClasses
    <XmlType(TypeName:="apiResponse")>
    Public Class AreaOfControlApiResponse
        <XmlArray("areaOfControlResponse")>
        Public Property AreaOfControlResponse As List(Of AOCS)
    End Class

    <XmlType(TypeName:="aocs")>
    Public Class AOCS
        <XmlArray("aoc")>
        Public Property AreaOfControl As List(Of AOC)
    End Class

    Public Class AOC

        '<XmlElement("aoc")>
        'Public Property Aoc As String

        <XmlAttribute("id")>
        Public Property AOCID As String

        <XmlAttribute("name")>
        Public Property AOCName As String

        <XmlAttribute("address")>
        Public Property AOCAddress As String
    End Class

End Namespace

Когда я десериализую, я вижу один AreaOfcontrolResponse, и внутри него у меня есть AreaOfControl, который пуст.Я думаю, что мой объект не определен правильно, поэтому десериализация не удалась.Может кто-нибудь указать мне правильное направление, пожалуйста.

...