Имя: Пароль:
1C
1С v8
Сериализация СпискаЗначений В XDTO. Где я не прав?
0 H A D G E H O G s
 
17.09.11
08:31
День добрый.
Вот есть такой код:

//Запись XDTO
   Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
   МойСписокЗначений=Новый СписокЗначений;
   МойСписокЗначений.Добавить("Мало мыла раму мама");
   ОбъектXDTO = Сериализатор.ЗаписатьXDTO(МойСписокЗначений);
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("C:\games\new.xml");
   ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
   ЗаписьXML.Закрыть();

//Чтение XDTO    
   ЧтениеXML = Новый ЧтениеXML;
   ЧтениеXML.ОткрытьФайл("C:\games\new.xml");
   ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
   ОбъектXDTO.Проверить();
   Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO);
   МойСписокЗначений=Сериализатор.ПрочитатьXDTO(ОбъектXDTO);


Запись в файл работает, на этапе чтения на строчке
МойСписокЗначений=Сериализатор.ПрочитатьXDTO(ОбъектXDTO);

вываливается с ошибкой:

по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/core}valueType    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType


Содержимое файла:

<ValueListType xmlns="http://v8.1c.ru/8.1/data/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <valueType/>
   <item>
       <value xsi:type="xs:string">Мало мыла раму мама</value>
       <id>0</id>
   </item>
   <lastId>0</lastId>
</ValueListType>
1 H A D G E H O G s
 
17.09.11
09:06
Ага,  вот так заработала

   Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
   МойСписокЗначений=Новый СписокЗначений;
   МойСписокЗначений.Добавить("Мало мыла раму мама");
   ОбъектXDTO = Сериализатор.ЗаписатьXDTO(МойСписокЗначений);
   ТипОбъектаXDTO=ОбъектXDTO.Тип();
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("C:\games\new.xml");
   ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
   ЗаписьXML.Закрыть();
   
   ЧтениеXML = Новый ЧтениеXML;
   ЧтениеXML.ОткрытьФайл("C:\games\new.xml");
   ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO);
   ОбъектXDTO.Проверить();
   Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO);
     МойСписокЗначений2=Сериализатор.ПрочитатьXDTO(ОбъектXDTO);
2 H A D G E H O G s
 
17.09.11
09:07
Тоесть в
ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO);

надо жестко задавать тип.

Только вот как получить
ТипОбъектаXDTO

без самого
ОбъектаXDTO
????
3 H A D G E H O G s
 
17.09.11
09:12
Все, понял
по пространству имен и имени типа из фабрики

ТипОбъектаXDTO=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueListType");
4 H A D G E H O G s
 
17.09.11
09:12
Итоговый код:

   Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
   МойСписокЗначений=Новый СписокЗначений;
   МойСписокЗначений.Добавить("Мало мыла раму мама");
   ОбъектXDTO = Сериализатор.ЗаписатьXDTO(МойСписокЗначений);
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("C:\games\new.xml");
   ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
   ЗаписьXML.Закрыть();
   
   ЧтениеXML = Новый ЧтениеXML;
   ТипОбъектаXDTO=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueListType");
   ЧтениеXML.ОткрытьФайл("C:\games\new.xml");
   ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO);
   ОбъектXDTO.Проверить();
   Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO);
     МойСписокЗначений2=Сериализатор.ПрочитатьXDTO(ОбъектXDTO);
5 H A D G E H O G s
 
17.09.11
09:13
Всем большое спасибо за помощь.

Вы даже не представляете, насколько этот код важен.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn