Как сериализовать / десериализовать XML в объект C #? - PullRequest
0 голосов
/ 01 мая 2018

Как я могу сериализовать / десериализовать эту строку XML в объект C #?

<Response>
    <Business Number="99696" Name="My business" Address=""  />
    <Purchase PurchaseID="7" CustomerID="0" >
        <Item Name="item 1" Qty="100" UnitCost="10.0000" />
        <Item Name="item2" Qty="200" UnitCost="20.0000" />
    </Purchase>
</Response>

Спасибо rubenc

Я думаю, что это другой вопрос, потому что все вопросы обычно говорят об одном уровне и / или списке предметов

Моя проблема в том, что у меня разные уровни:

<Response>               //root
    <Business ... />     //level 1
    <Purchase... >       //level 1
        <Item ... />     // list

Я получаю нулевое число, имя и т. Д.

Это то, что я пробовал до сих пор:

    [Serializable, XmlRoot("Response")]
    public class Response
    {
        public Depot depot = new Depot();

        // I have tried this also:
        //[XmlElement("Number")]
        //public string Number { get; set; }

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

    public class Depot
    {
        [XmlElement("Number")]
        public string Number { get; set; }

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


    static object DeserializeResponse(string responseString)
    {
        var serializer = new XmlSerializer(typeof(Response));

        Response result;
        using (var reader = new StringReader(responseString))
        {
            result = (Response)serializer.Deserialize(reader);
        }

        return result;
    }

1 Ответ

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

Нашел решение:

public class Response
{
    [System.Xml.Serialization.XmlElementAttribute("Business", typeof(ResponseBusiness), Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public object[] Items { get; set; }
}

public partial class ResponseBusiness
{
    string NumberField;

    string NameField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Number
    {
        get
        {
            return this.NumberField;
        }
        set
        {
            this.NumberField = value;
        }
    }
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name
    {
        get
        {
            return this.NameField;
        }
        set
        {
            this.NameField = value;
        }
    }

Я вызываю класс XmlSerializer следующим образом:

var serializer = new XmlSerializer(typeof(Response), new XmlRootAttribute("Response"));

И я могу прочитать информацию вот так:

string businessNumber = ((ResponseBusiness) result.Items [0]). Number;

Надеюсь, что это может помочь кому-то еще.

...