|
XDTO ошибка при чтении "Структура объекта не соответствует типу: {ххх}"
| ☑ |
0
nicxxx
29.06.16
✎
20:50
|
Гуру xml, подскажите, куда копать?
Если в тэге явно указать тип и пространство имен, например так
<Deal xmlns=""myNameSpace"" xmlns:xs=""; xmlns:xsi=""; xsi:type=""Deal"">",
то фабрика прекрасно читает такой тэг. Однако, когда я читаю тэг вида <Deal>, но указывая явно тип в фабрике, т.е. так:
ТипОбъектаXDTO = ФабрикаXDTO.Тип("myNameSpace", "Deal");
ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение, ТипОбъектаXDTO);
то в итоге получаю ошибку:
"Структура объекта не соответствует типу: {myNameSpace}Deal"
|
|
1
Beretta
29.06.16
✎
21:21
|
Копать в понимание пространств и полностью квалифицированных имен.
В первом случае у тебя в файле объект с именем Deal из пространства myNameSpace. Фабрика его знает и читает без подсказок.
Во втором - у тебя в файле объект с именем Deal из пустого пространства имен (вернее из пространства по умолчанию, определенного по вверх по иерархии). А ты пытаешся насильно прочитать обеъкт с типом Deal из пространства myNameSpace.
Я бы тоже на месте фабрики возмутился.
|
|
2
nicxxx
30.06.16
✎
10:54
|
да, ход мыслей понятен.
забыл уточнить - реквизиты тэга <Deal> приходят в виде элементов, т.е.
<Deal>
<dealDate>2016-01-01</dealDate>
...
Однако есть еще одна база с похожей задачей, отличие в формате сообщений - там реквизиты приходя в атрибутах тэга, т.е.
<Deal deal_date="2016-01-13T18:15:50"/>
и они так же нетипизированы, как и в первой базе.
Так вот в базе №2 такое чтение (с явным указанием типа) работает.
|
|
3
nicxxx
30.06.16
✎
11:39
|
провел еще один эксперимент - переделал сообщение из базы №1 таким образом, чтобы реквизиты объекта были в атрибутах тэга, а не в элементах. типизированное чтение работает. Интересно, есть этому разумное объяснение? (я, к своему сожалению, в xml не эксперт. некогда углубляться в его изучение)
|
|
4
Beretta
30.06.16
✎
23:49
|
Есть много интересных вариантов чтения xml (к сожалению, некогда объяснять разумное поведение системы в разных случаях). Если есть проблема, то ее можно решить, если не держать ее в тайне. Если же есть желание проводить эксперименты, то всецело разделяю с тобой радость открытия нового, завидую получению опыта и желаю всяческих успехов в этом нелегком деле =)
|
|