Как десериализовать ответ XML - PullRequest
0 голосов
/ 14 мая 2018

Я извлекаю данные xml из веб-API и десериализирую данные в объекты.работает правильно.Десериализованы только первые 2 элемента Vendor, элемент Product не десериализован.Что я делаю не так?

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 14 мая 2018

У вас есть несколько вещей, о которых нужно позаботиться.

Сделать только один элемент XmlRoot. См. Ссылку ниже и выполните поиск «Управление сериализацией классов с использованием XmlRootAttribute и XmlTypeAttribute».

https://docs.microsoft.com/en-us/dotnet/standard/serialization/controlling-xml-serialization-using-attributes

Здесь, в вашем случае, класс "Result" является корневым.

Отдохни все XmlType.

В классе вендора вместо «XmlArrayItem» сделайте его просто «XmlElement».

Вот рабочий код.

    [XmlType("Product")]
    public class Product
    {
        [XmlAttribute(AttributeName = "pname")]
        public string Pname { get; set; }
        [XmlAttribute(AttributeName = "cpe")]
        public string Cpe { get; set; }
    }

    [XmlType("Vendor")]
    public class Vendor
    {
        [XmlElement(ElementName = "Product")]
        public List<Product> Product { get; set; }
        [XmlAttribute(AttributeName = "vname")]
        public string Vname { get; set; }
        [XmlAttribute(AttributeName = "cpe")]
        public string Cpe { get; set; }
    }

    [XmlType("VendorInfo")]
    public class VendorInfo
    {
        [XmlElement(ElementName = "Vendor")]
        public List<Vendor> Vendor { get; set; }
        [XmlAttribute(AttributeName = "xml:lang")]
        public string Lang { get; set; }
    }

    [XmlType("Status")]
    public class Status
    {
        [XmlAttribute(AttributeName = "feed")]
        public string Feed { get; set; }
        [XmlAttribute(AttributeName = "keyword")]
        public string Keyword { get; set; }
    }

    [XmlRoot(ElementName = "Result")]
    public class Result
    {
        [XmlElement(ElementName = "VendorInfo")]
        public VendorInfo VendorInfo { get; set; }
        [XmlElement(ElementName = "Status")]
        public Status Status { get; set; }
    }
...