Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2021, 21:45   #1
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию DataContract и XML

Есть специалисты по данной теме?

Что и как необходимо прописать, чтобы DataContract пропускал ветки файла XML при десериализации, которые мне нафик не нужны? Нет особого желания создавать классы под данные ветки.

DataContract может создавать в XML Атрибуты? или это глухой номер и он создаст именно XmlElement ?
melky вне форума Ответить с цитированием
Старый 08.12.2021, 09:38   #2
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию оригинал XML

Код:
 [Serializable]
    [DataContract (Namespace = "")]
    public class PlcProjectInfo
    {
        public PlcProjectInfo()
        {
            RoutingInfo = new List<AdsInfo>(); //Список Ads, можно наверное обойтись без списка??????
            Symbols = new List<Symbol>();     // Список Symbol
        }

        [DataMember]
        public List<AdsInfo> RoutingInfo { get; set; }
 
        [DataMember]
        public List<Symbol> Symbols { get; set; }
    }

    [DataContract (Namespace = "")]
    public class AdsInfo
    {
        public AdsInfo() { }

        [DataMember]
        public string NetId;// { get; set; }
        [DataMember]
        public string Port;// { get; set; }

        public AdsInfo(string netid, string port)
        {
            NetId = netid;
            Port = port;
        }
    }

    [DataContract (Namespace = "")]
    public class Symbol
    {
        public Symbol() { }

        [DataMember (Order = 0, EmitDefaultValue = false)]
        public string Name_ { get; set; }

        [DataMember (Order = 1, EmitDefaultValue = false)]
        public Names Name { get; set; }

        [DataMember (Order = 2, EmitDefaultValue = false)]
        public string Signal { get; set; }

        [DataMember (Order = 3, EmitDefaultValue = false)]
        public bool Active { get; set; }

        [DataMember (Order = 4, EmitDefaultValue = false)]
        public string Type { get; set; }

        [DataMember (Order = 5, EmitDefaultValue = false)]
        public string Comment { get; set; }

        [DataMember (Order = 6, EmitDefaultValue = false)]
        public string IGroup { get; set; }

        [DataMember (Order = 7, EmitDefaultValue = false)]
        public string IOffset { get; set; }

        [DataMember (Order = 8, EmitDefaultValue = false)]
        public string BitSize { get; set; }


        public Symbol(string name_, Names names , string signal, bool active, string type, string comment, string igroup, string ioffset, string bitsize)
        {
            Name_ = name_;
            Name = names;
            Signal = signal;
            Active = active;
            Type = type;
            Comment = comment;
            IGroup = igroup;
            IOffset = ioffset;
            BitSize = bitsize;
        }

        [DataContract (Namespace = "")]
        public class Names
        {
            public Names() { }

            public Names(string name, string Static, string constant, string isDefinedInLibrary, string taskprio)
            {
                Name = name;
                this.Static = Static;
                Constant = constant;
                IsDefinedInLibrary = isDefinedInLibrary;
                TaskPrio = taskprio;
            }
            [DataMember (Order = 0, EmitDefaultValue = false)]
            public string Static { get; set; }

            [DataMember (Order = 1, EmitDefaultValue = false)]
            public string Constant { get; set; }

            [DataMember (Order = 2, EmitDefaultValue = false)]
            public string IsDefinedInLibrary { get; set; }

            [DataMember (Order = 3, EmitDefaultValue = false)]
            public string TaskPrio { get; set; }

            [DataMember (Order = 5, EmitDefaultValue = false)]
            public string Name { get; set; }
        }
    }

Если наполнить класс и сериализовать его при помощи DataContractSerialize то он потом десериализуется, но если попытаться десериализовать оригинальный xml то вылетит куча ошибок. При этом если все делать через XmlSerialize то он просто игнорирует ветки отсутствующих классов и заполняет только приведенный выше пример классов. Ессно там не DataMember а [XmlElement] или [XmlAttribute]
Вложения
Тип файла: zip PV41tpy.zip (48.1 Кб, 0 просмотров)

Последний раз редактировалось melky; 08.12.2021 в 09:41.
melky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия XML при помощи Xml.Linq melky C# (си шарп) 1 30.03.2020 08:40
C#. Парсинг XML-файла с использованием библиотеки System.xml.linq Gift020 Помощь студентам 5 04.04.2013 13:44
программа, которая должна находить в данной директории *.xml файлы и переименовывать в *.xml.dt. (Delphi) nice.name Помощь студентам 2 09.01.2013 15:40
сформировать xml-файл на основе другого xml-файла NieL Общие вопросы Delphi 2 21.12.2010 15:49
парсер XML, не видит XML тэги supercelt PHP 3 02.11.2009 19:18