none
Как десериализовать xml используя сгенерированный из xsd класс RRS feed

  • Вопрос

  • Здравствуйте. Я используя утилиту xsd.exe сгенерировал файл с расширением CS используя схемы для нужной мне xml. Скажите, как теперь используя этот файл десериализовать xml. Я просто думал что там всего один класс будет (в этом файле), а там их много.

    30 октября 2014 г. 5:25

Ответы

  • Значит где-то у вас идет несоответствие XML и XSD. В XSD прописано что элемент одиночный, а в XML обнаружилась коллекция... Посмотрите, может найдете.

    Добрый день, Варианта 3 - вы забыли присоединить типы объектов (2 xsd файла надо) - на закупках xsd кривые для генерации классов, т.к. В них используется choice объекты, а они десериализуются у вас в object[] - в xsd не указан параметр unbound где надо и на оборот. Вообщем сначала вам необходимо подправить вручную xsd файлы, потом еще править прийдется сгенерированнные классы. Я с ними в свое время так же мучался... А схема там меняется раз в месяц примерно, так что придется учиться. Со следующего года сильно схемы изменят.
    P.s. Внутри класса export еще веселее будет и если вы точно не представляете что описывает xsd схема, как все это преобразуется в классы и объекты, то сначала изучите теорию и примеры.
    • Изменено Maxim Shusharin 30 октября 2014 г. 12:40
    • Помечено в качестве ответа Timur2008 31 октября 2014 г. 5:29
    30 октября 2014 г. 12:35

Все ответы

  • Добрый день.

    А взять и вызвать десериализацию класса который указан в XML корневым, не пробовали?

    30 октября 2014 г. 10:16
    Отвечающий
  • Пробовал , но там нет корневого класса. Я понял что там каждый класс означает свою сущность но это не помогло.Теперь выбрасывается эксепшн

    В документе XML (1, 40) присутствует ошибка. {"<export xmlns='http://zakupki.gov.ru/oos/export/1'> не ожидался."}

    Делаю так

    XmlReader reader = new XmlTextReader(@"G:\1.xml");
                XmlSerializer serializer = new XmlSerializer(typeof(executionDate));
                var dialer = (executionDate)serializer.Deserialize(reader);
                reader.Close();



    • Изменено Timur2008 30 октября 2014 г. 10:37
    30 октября 2014 г. 10:33
  • А можно первые 5 строк из вашего XML файла посмотреть?
    30 октября 2014 г. 10:36
    Отвечающий
  • <?xml version="1.0" encoding="UTF-8"?>
    -<export xmlns:oos="http://zakupki.gov.ru/oos/types/1" xmlns="http://zakupki.gov.ru/oos/export/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">-<contract schemeVersion="4.4"><oos:id>17248503</oos:id><oos:regNum>0165100000114000112</oos:regNum>


    извините , не форматируется почему то



    • Изменено Timur2008 30 октября 2014 г. 10:43
    30 октября 2014 г. 10:38
  • Судя по XML, у вас корневой тип export, а не executionDate, как вы пишите в коде...

    30 октября 2014 г. 11:02
    Отвечающий
  • Да так и есть блин :( , но теперь пишет

    Невозможно создать временный класс (результат=1).

    error CS0030: Преобразование типа "signature[]" в "signature" невозможно

    error CS0029: Неявное преобразование типа "signature" в "signature[]" невозможно

    Думал может прав не хватает, закинул xml в папку с программой , та же ошибка :(
    • Изменено Timur2008 30 октября 2014 г. 11:36
    30 октября 2014 г. 11:35
  • Значит где-то у вас идет несоответствие XML и XSD. В XSD прописано что элемент одиночный, а в XML обнаружилась коллекция... Посмотрите, может найдете.
    30 октября 2014 г. 11:51
    Отвечающий
  • Хорошо , буду искать.
    30 октября 2014 г. 11:58
  • Значит где-то у вас идет несоответствие XML и XSD. В XSD прописано что элемент одиночный, а в XML обнаружилась коллекция... Посмотрите, может найдете.

    Добрый день, Варианта 3 - вы забыли присоединить типы объектов (2 xsd файла надо) - на закупках xsd кривые для генерации классов, т.к. В них используется choice объекты, а они десериализуются у вас в object[] - в xsd не указан параметр unbound где надо и на оборот. Вообщем сначала вам необходимо подправить вручную xsd файлы, потом еще править прийдется сгенерированнные классы. Я с ними в свое время так же мучался... А схема там меняется раз в месяц примерно, так что придется учиться. Со следующего года сильно схемы изменят.
    P.s. Внутри класса export еще веселее будет и если вы точно не представляете что описывает xsd схема, как все это преобразуется в классы и объекты, то сначала изучите теорию и примеры.
    • Изменено Maxim Shusharin 30 октября 2014 г. 12:40
    • Помечено в качестве ответа Timur2008 31 октября 2014 г. 5:29
    30 октября 2014 г. 12:35
  • Хорошо , понял спасибо :) значит все будет не так просто :)
    31 октября 2014 г. 5:31