Codes DeCodes Ответов: 3

Десериализация XML в список объектов, показывающих ошибку < xmlns=">, не ожидалась.


Я потребляю SOAP-сервисы из своего приложения и получаю следующий XMl-контент в качестве ответа, потребляющего файл .wsdl в моем коде.

<Vehicles>
    <FourWheeler>
        <Availability>
            <Brand>Toyota</Brand>
            <Model>Fortuner</Model>
            <Country>Japan</Country>
            <Cost>90000</Cost>           
        </Availability>
        <Availability>
            <Brand>Hyundai</Brand>
            <Model>Elentra</Model>
            <Country>South Korea</Country>
            <Cost>75000</Cost>           
        </Availability>
        <Availability>
            <Brand>Volkswagan</Brand>
            <Model>Polo</Model>
            <Country>Gremany</Country>
            <Cost>95000</Cost>                   
        </Availability>
        <Availability>
            <Brand>Tata</Brand>
            <Model>Nano</Model>
            <Country>25000</Country>
            <Cost></Cost>                    
        </Availability>
    </Outbound>
    <TwoWheeler></TwoWheeler>
</Vehicles>


Я разработал свой класс для десериализации XML таким образом::

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

using System.Xml.Serialization;
namespace ConsoleApp2
{
    [XmlRoot("Vehicles")]
    public class Vehicles
    {
        [XmlElement("FourWheeler")]
        public FourWheeler FourWheeler
        {
            get;
            set;
        }
    }

    [XmlRoot("FourWheeler")]
    public class FourWheeler
    {
        [XmlElement("Availability")]
        public Vehicles Availability
        {
            get;
            set;
        }
    }

    [XmlRoot("Availability")]
    public class Availability
    {

        [XmlElement("Brand")]
        public string Brand
        {
            get;
            set;
        }

        [XmlElement("Model")]
        public string Model
        {
            get;
            set;
        }


        [XmlElement("Country")]
        public string Country
        {
            get;
            set;
        }

        [XmlElement("Cost")]
        public string Cost
        {
            get;
            set;
        }
    }
}


Мой код для десериализации XML в список таков :

XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Vehicles>));
System.IO.StreamReader sr = new System.IO.StreamReader("E:\\xmlTier.txt");
List<Vehicles> flightavailabilitylst = (List<Vehicles>)xmlSerializer.Deserialize(sr);


Я получаю ошибку в строке
List<Vehicles> flightavailabilitylst = (List<Vehicles>)xmlSerializer.Deserialize(sr);
:
System.InvalidOperationException: 'There is an error in XML document (1, 2).'

InvalidOperationException: <Vehicles xmlns=''> was not expected.


Что происходит неправильно и каков правильный подход к преобразованию XML в список объектов???

Что я уже пробовал:

Глядя в XML, иерархия-это список доступности транспортных средств "FourWheeler"... Поэтому я добавил код:
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "Vehicles";
xRoot.IsNullable = true;


Это мне не помогло.

3 Ответов

Рейтинг:
27

F-ES Sitecore

Ваш xml-файл недействителен. Заменять

</Outbound>
<TwoWheeler></TwoWheeler>


с

</FourWheeler>


XML представляет собой один узел транспортных средств а не их список поэтому измените код соответствующим образом

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Vehicles));
System.IO.StreamReader sr = new System.IO.StreamReader( ... );

Vehicles flightavailabilitylst = (Vehicles)xmlSerializer.Deserialize(sr);


Также доступность-это список доступных объектов, а не один объект транспортных средств, так что измените и это

[XmlRoot("FourWheeler")]
public class FourWheeler
{
    [XmlElement("Availability")]
    public List<Availability> Availability
    {
        get;
        set;
    }
}


Codes DeCodes

XML обновлен. смотреть ниже. Все еще показывает ту же ошибку

F-ES Sitecore

Я обновил свое решение

Codes DeCodes

Спасибо, что потратили на это свое время.. Это сработало... Спасибо, Чувак..

Рейтинг:
2

Gerry Schmitz

Ваши теги "FourWheeler" и "Outbound" "не совпадают".

то есть ваш XML-файл недействителен.


Codes DeCodes

XML обновлен. смотреть ниже. Все еще показывает ту же ошибку

Gerry Schmitz

// Примечание: Для сгенерированного кода может потребоваться как минимум .NET Framework 4.5 или .NET Core/Standard 2.0.
/// <Примечания>
[Система.Размер()]
[Система.ComponentModel.DesignerCategoryAttribute( "код" )]
[Система.В формате XML.Сериализации.XmlTypeAttribute( AnonymousType = true )]
[Система.В формате XML.Сериализации.XmlRootAttribute( Namespace = "", IsNullable = false )]
общественные транспортные средства частичного класса {

частные транспортные средства доступность[] fourWheelerField;

частный объект twoWheelerField;

/// <Примечания>
[Система.В формате XML.Сериализации.XmlArrayItemAttribute( "доступность", IsNullable = false )]
доступность общественного транспорта[] четырехколесный двигатель {
получить {
верните это.четырехколесное поле;
}
набор {
this.fourWheelerField = значение;
}
}

/// <Примечания>
общественный объект TwoWheeler {
получить {
вернуть это.twoWheelerField;
}
набор {
this.twoWheelerField = значение;
}
}
}

/// <Примечания>
[Система.Размер()]
[Система.ComponentModel.DesignerCategoryAttribute( "код" )]
[Система.В формате XML.Сериализации.XmlTypeAttribute( AnonymousType = true )]
доступность транспортных средств общего пользования частичного класса {

частная строка brandField;

частная строку modelField;

частная строка countryField;

частное строковое поле costField;

/// <Примечания>
публичный струнный бренд {
получить {
вернуть это.brandField;
}
набор {
this.brandField = значение;
}
}

/// <Примечания>
модель общественного строки {
получить {
вернуть это.modelField;
}
набор {
this.modelField = значение;
}
}

/// <Примечания>
публичная строка страна {
получить {
вернуть это.countryField;
}
набор {
this.countryField = значение;
}
}

/// <Примечания>
стоимость праздничной колонны {
получить {
вернуть это.costField;
}
набор {
this.costField = значение;
}
}
}

Рейтинг:
0

Codes DeCodes

<Vehicles>
    <FourWheeler>
        <Availability>
            <Brand>Toyota</Brand>
            <Model>Fortuner</Model>
            <Country>Japan</Country>
            <Cost>90000</Cost>           
        </Availability>
        <Availability>
            <Brand>Hyundai</Brand>
            <Model>Elentra</Model>
            <Country>South Korea</Country>
            <Cost>75000</Cost>           
        </Availability>
        <Availability>
            <Brand>Volkswagan</Brand>
            <Model>Polo</Model>
            <Country>Gremany</Country>
            <Cost>95000</Cost>                   
        </Availability>
        <Availability>
            <Brand>Tata</Brand>
            <Model>Nano</Model>
            <Country>25000</Country>
            <Cost></Cost>                    
        </Availability>
    </FourWheeler>
    <TwoWheeler></TwoWheeler>
</Vehicles>


XML обновлен. но все равно показывает ту же ошибку.