Разбираюсь с XML

Просмотр 15 сообщений - с 31 по 45 (из 46 всего)
  • Автор
    Записи
  • #9509
    manjey73
    Участник

    Вот CmdGroups может не быть вообще и изначально нет Telegram

    #9510
    Romiros
    Участник

    А так это не важно. Я думал у Val или Telegram меняются свойства.
    Я Вам пример бросил, там изначально нет телеграм. Они добавляются при нажатии на вторую кнопку уже в считаю конфигурацию из файла. Я просто не пойму зачем ещё ICollection. Может из Вашего примера станет понятно.

    #9512
    manjey73
    Участник

    я с ICollection по другому поводу разбираюсь, чтобы читать в списки все атрибуты сразу, без указания в коде имен атрибутов. С другой стороны если десериализация будет проходить нормально, то переменные достаточно в классе будет описать я думаю. Надо просто попробовать и так и так и посмотреть что будет потом удобнее запихивать в логику драйвера.

    #9514
    Romiros
    Участник

    Наверное можно в самом классе конфигурации реализовать метод построения такого списка и вызывать его при инициализации тегов.

    #9515
    manjey73
    Участник

    Вот только с MBus этот фокус не пройдет из-за разного количества переменных от приборов. И это я еще не нарывался на приборы с расширенными типами переменных и со строковыми данными…
    По этому там больше списки подходят или массивы без описания в классах..

    • Ответ изменён 8 лет, 3 месяца назад пользователем manjey73.
    #9518
    Romiros
    Участник

    Почему не прокатит? Количество переменных не имеет никакого значения.
    Они и так хранятся в коллекциях List и нормально сериализуется.

    #9521
    manjey73
    Участник

    Пока смотрю ваш вариант.

    Как избавиться от атрибутов с данными http://www.w3.org/2001/XMLSchema-instance
    xmlns:xsi и xmlns:xsd ?

    Ну у вас еще все текстом, но в атрибуты превратить думаю не проблема.

    Так же закоментировал добавление cmdGroup и при этом она все равно была создана с пустым атрибутом xsi:nil (почему не null ? )

    Попробую поработать над этим вариантом, но кажется без разделения классов избавиться от неиспользуемых групп не получится, что-то мне кажется.

    • Ответ изменён 8 лет, 3 месяца назад пользователем manjey73.
    #9524
    Romiros
    Участник

    Зачем Вам xml файл разбирать? Какая разница атрибуты или нет? У Вас есть класс конфигурации, работайте с ним, xml просто это дело хранит. Как он это делает, не важно.

    #9525
    manjey73
    Участник

    Иногда полезно для явного обращения к тем или иным данным файла.
    Я пока не определился что и как, только разбираюсь с этим вопросом.
    Ну и в некотором роде сделать однотипное решение а не только для себя, понять какой вариант мне больше понравится и с каким будет работать удобнее в рамках Scada системы.

    #9526
    Romiros
    Участник

    Если делать через сериализацию, то про файл можно забыть, он по сути как хранилище. Можно даже не xml а бинарник. Если же Вы хотите работать с файлом, то лучше наверное ручками его собирать. Хотя как по мне проще и быстрее обратиться к свойству класса, чем к атрибуту.

    #9527
    manjey73
    Участник

    Например для смены одной единственной переменной так же использовать сериализацию всех и вся ?, а то, что я задам в xml руками некоторые параметры, как быть с ними ?
    А задавать придется, например параметр range, прописывать указанный производителем, так как он не фигурирует в посылке данных от слова совсем…
    Можно конечно редактировать в UI драйвера, и тем самым выполнить сериализацию
    Надо хранить полный образ файла, хотя он и так будет…

    В общем надо в разных вариантах попробовать.

    кстати я научился читать все атрибуты не занимаясь разбором их имен и их количества, сразу коллекцией в список…

    #9528
    manjey73
    Участник

    Не могу получить доступ к переменной после load.

    private void btnLoad_Click(object sender, EventArgs e)
            {
                //Загрузка всей конфигурации и вывод параметров
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(DevTemplate));
                using (FileStream fs = new FileStream("mbus.xml", FileMode.Open))
                {
                    devTemlate = (DevTemplate)xmlSerializer.Deserialize(fs);
                    fs.Close();
                }
              Console.WriteLine(sndGroup.SndName);
            }

    И получаю ошибку System.NullReferenceException: «Ссылка на объект не указывает на экземпляр объекта.»

    • Ответ изменён 8 лет, 3 месяца назад пользователем manjey73.
    • Ответ изменён 8 лет, 3 месяца назад пользователем manjey73.
    #9531
    Romiros
    Участник

    Вы ничего не меняли? У меня работает тот же код, что и у Вас.

    #9532
    Romiros
    Участник

    У вас не создан или DevTemplate или SndGroup либо SndName. Проверьте пожалуйста.

    #9542
    manjey73
    Участник

    Вроде ничего не менял, Сперва ессно я нажал Без Telegram, в файл записались SndGroup и CmdGroup, потом делаю чтение с выводом в консоль и такая ошибка

Просмотр 15 сообщений - с 31 по 45 (из 46 всего)
  • Для ответа в этой теме необходимо авторизоваться.