Задать вопрос
D1m0nd
@D1m0nd
junior C# developer

Как десериализировать xml элемент, как массив?

Привет, пытаюсь десериализировать xml, но столкнулся с проблемой, которая состоит в том, что после десериализации поле public List Return { get; set; } остается пустым списком

Ниже предсавлен сам xml и модель с методом десериализации

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:getServiceCost2Response xmlns:ns2="http://dpd.ru/ws/calculator/2012-03-20">
            <return>
                <serviceCode>MAX</serviceCode>
                <serviceName>DPD MAX domestic</serviceName>
                <cost>7752.0</cost>
                <days>7</days>
            </return>
            <return>
                <serviceCode>BZP</serviceCode>
                <serviceName>DPD 18:00</serviceName>
                <cost>9708.64</cost>
                <days>5</days>
            </return>
            <return>
                <serviceCode>CUR</serviceCode>
                <serviceName>DPD CLASSIC</serviceName>
                <cost>76640.55</cost>
                <days>3</days>
            </return>
            <return>
                <serviceCode>ECN</serviceCode>
                <serviceName>DPD ECONOMY</serviceName>
                <cost>7419.91</cost>
                <days>6</days>
            </return>
            <return>
                <serviceCode>PCL</serviceCode>
                <serviceName>DPD OPTIMUM</serviceName>
                <cost>8807.7</cost>
                <days>5</days>
            </return>
            <return>
                <serviceCode>MXO</serviceCode>
                <serviceName>DPD Standard</serviceName>
                <cost>8604.0</cost>
                <days>4</days>
            </return>
        </ns2:getServiceCost2Response>
    </S:Body>
</S:Envelope>


вот такая модель у меня получилась
[XmlRoot(ElementName="return")]
public class Return {
    [XmlElement(ElementName="serviceCode")]
    public string ServiceCode { get; set; }
    [XmlElement(ElementName="serviceName")]
    public string ServiceName { get; set; }
    [XmlElement(ElementName="cost")]
    public string Cost { get; set; }
    [XmlElement(ElementName="days")]
    public string Days { get; set; }
}

[XmlRoot(ElementName="getServiceCost2Response", Namespace="http://dpd.ru/ws/calculator/2012-03-20")]
public class GetServiceCost2Response {
 
    [XmlElement(ElementName="return")]
    public List<Return> Return { get; set; }
}

[XmlRoot(ElementName="Body", Namespace="http://schemas.xmlsoap.org/soap/envelope/")]
public class Body {
    [XmlElement(ElementName="getServiceCost2Response", Namespace="http://dpd.ru/ws/calculator/2012-03-20")]
    public GetServiceCost2Response GetServiceCost2Response { get; set; }
}

[XmlRoot(ElementName="Envelope", Namespace="http://schemas.xmlsoap.org/soap/envelope/")]
public class Envelope {
    [XmlElement(ElementName="Body", Namespace="http://schemas.xmlsoap.org/soap/envelope/")]
    public Body Body { get; set; }
}


Метод , с помощью которого я десериализрую объект

static Envelope EnvelopeDeserializer(string xml)
{
    var xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(xml);
    XmlSerializer serializer = new XmlSerializer(typeof(Envelope));
    using StringReader reader = new StringReader(xmlDoc.InnerXml);
    var mDeserialize = (Envelope)serializer.Deserialize(reader)!;
    return mDeserialize;
}
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Средний 5 комментариев
Решения вопроса 1
D1m0nd
@D1m0nd Автор вопроса
junior C# developer
[XmlElement(ElementName = "return", Namespace="")]
    public List<Return> Return { get; set; }


необходимо явным образом указать Namespace, если он не совпадает с рутовым элементом
источник
https://ru.stackoverflow.com/questions/1465543/%d0...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы