1

Тема: Помилка при десеріалізації XML

Прів. В мене є клас MessageBase, та купка класів, що наслідують його.
Коли я писав от такий XML

<ArrayOfMessageBase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <MessageBase xsi:type="MessageA">
 </MessageBase>

 <MessageBase xsi:type="MessageB">
 </MessageBase>

</ArrayOfMessageBase>

то все працювало гарно, але коли я вирішив трохи змінити структуру всього цього, і вийшло от так

<ArrayOfChapter  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Chapter>
<id>1</id>
        <dialogs>
                <Dialog>
                        <id>1</id>
                        <messages>
                                <MessageBase xsi:type="MessageText">
                                        <messages>
                                                <string>alalalala</string>
                                        </messages>
                                <MessageBase>
                        </messages>
                </Dialog>

        </dialogs>
</Chapter>
</ArrayOfChapter>

То все перестало працювати, і при десеріалізації вилазить ось така помилка

InvalidOperationException: The specified type was not recognized: name='MessageText' namespace='', at <MessageBase xmlns=''>

Що воно хоче? Що треба зробити, аби воно почало рекогнайзити вказані типи?

2 Востаннє редагувалося VTrim (14.02.2016 21:28:45)

Re: Помилка при десеріалізації XML

Ви до всіх вкладених обєктів по черзі звертаєтесь, щоб отримати доступ до останнього?

3

Re: Помилка при десеріалізації XML

VTrim написав:

Ви до всіх вкладених обєктів по черзі звертаєтесь, щоб отримати доступ до останнього?

я юзаю https://msdn.microsoft.com/ru-ru/librar … .110).aspx щоб знайти Chapter з потрібним id, а потім таким самим чином шукаю Dialog з потрібним id в знайденому Chapter'і

4

Re: Помилка при десеріалізації XML

І я вже розібрався в проблемі, я забув вказати додаткові типи при десеріалізації

Type[] extraTypes = new Type[] {
            typeof(MessageText),
            typeof(MessageAdmin),
            typeof(MessageImage),
            typeof(MessageConnection),
            typeof(MessageSelectCharButton),
            typeof(MessageSystem),
            typeof(MessageSCL),
            typeof(MessageAnswer),
            typeof(MessageSound),
            typeof(MessagePause)
        };
var serializer2 = new XmlSerializer(typeof(List<Chapter>), extraTypes);