Как десериализовать XML с элементами списка по порядку - PullRequest
1 голос
/ 20 сентября 2019

Я десериализирую следующий Category XML, содержащий Item дочерние элементы, а также Item_Group элементы, содержащие Item элементы.

Проблема в том, что я получаю список предметов в Category и отдельный список предметов в каждой группе предметов.Поэтому мне нужно добавить некоторые идентификаторы, чтобы при сериализации XML можно было сохранять порядок элементов Item и Item_Group в XML.

XML


    <Category Label="CategoryOne" Type="CategoryType">
        <Item Label="Item1" Type="ItemTypeA" Amount="0.00" />
        <Item Label="Item2" Type="ItemTypeB" Amount="0.00" />
        <Item Label="Item3" Type="ItemTypeA" Amount="0.00" />
        <Item_Group Label="ItemGroupOne" Type="ItemGroupType">
            <Item Label="Item4" Type="ItemTypeC" Amount="0.00" />
            <Item Label="Item5" Type="ItemTypeA" Amount="0.00" />
            <Item Label="Item6" Type="ItemTypeB" Amount="0.00" />
        </Item_Group>
        <Item Label="Item7" Type="ItemTypeB" Amount="0.00" />
        <Item Label="Item8" Type="ItemTypeA" Amount="0.00" />
    </Category>

Есть ли что-то, что я могу добавить к следующему прокси-серверу cs для достижения этого?

CS-прокси для десериализации XML


    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.com")]
    public partial class ABCCategory
    {
        private ABCCategoryItem[] itemField;
        private ABCCategoryItemGroup[] itemGroupField;
        private string labelField;
        private string typeField;

        [System.Xml.Serialization.XmlElementAttribute("Item")]
        public ABCCategoryItem[] Item
        {
            get
            {
                return this.itemField;
            }
            set
            {
                this.itemField = value;
            }
        }

        [System.Xml.Serialization.XmlElementAttribute("Item_Group")]
        public ABCCategoryItemGroup[] Item_Group
        {
            get
            {
                return this.itemGroupField;
            }
            set
            {
                this.itemGroupField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Label
        {
            get
            {
                return this.labelField;
            }
            set
            {
                this.labelField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Type
        {
            get
            {
                return this.typeField;
            }
            set
            {
                this.typeField = value;
            }
        }
    }

    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.bonafidee.com")]
    public partial class ABCCategoryItemGroup
    {
        private ABCCategoryItem[] itemField;
        private string labelField;
        private string typeField;

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Label
        {
            get
            {
                return this.labelField;
            }
            set
            {
                this.labelField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Type
        {
            get
            {
                return this.typeField;
            }
            set
            {
                this.typeField = value;
            }
        }

        [System.Xml.Serialization.XmlElementAttribute("Item")]
        public ABCCategoryItem[] Item
        {
            get
            {
                return this.itemField;
            }
            set
            {
                this.itemField = value;
            }
        }
    }

    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.bonafidee.com")]
    public partial class ABCCategoryItem
    {
        private string labelField;
        private string typeField;
        private string amountField;

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Label
        {
            get
            {
                return this.labelField;
            }
            set
            {
                this.labelField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Type
        {
            get
            {
                return this.typeField;
            }
            set
            {
                this.typeField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Amount
        {
            get
            {
                return this.amountField;
            }
            set
            {
                this.amountField = value;
            }
        }
    }

РЕДАКТИРОВАТЬ

В соответствии с запросом ниже приведены модели CS, которые заполняются через сообщение http из представления.Затем CategoryModel необходимо сериализовать.

cs Модели

using System.Collections.Generic;

namespace Company.Models
{
    public class CategoryModel
    {
        public string Label { get; set; }
        public string Type { get; set; }
        public List<ItemGroupModel> ItemGroups { get; set; }
        public List<ItemModel> Items { get; set; }
    }
}

using System.Collections.Generic;

namespace Company.Models
{
    public class ItemGroupModel
    {
        public string Label { get; set; }
        public string Type { get; set; }
        public List<ItemModel> Items { get; set; }
    }
}

namespace Company.Models
{
    public class ItemModel
    {
        public string Label { get; set; }
        public string Type { get; set; }
        public string Amount { get; set; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...