Я скрестил пальцы на том, что кто-то там хорошо понимает Microsoft XmlSerializer.
По сути, я построил систему вывода XML на задней панели сериализатора, что теперь доставляет мне много хлопот, и я пытаюсь избежать существенной перезаписи.
Введение
Моя текущая система использует много производных классов.
Например,
BaseResponse -> CarParkResponse -> CarParkResponseInherited
BaseResponse и CarParkResponse (оба в библиотеке dll) отделены от CarParkResponseInherited.
В результате базовые классы игнорируют производный класс.
Что я сделал
-> Объявленные производные классы
Я ценю, что для того, чтобы xmlserializer выполнил свою задачу, есть несколько способов объявить классы dervied.
- Объявление производных классов в базовых классах с использованием XmlInclude
или
- Объявленные типы должны быть сериализованы и десериализованы в xmlSerialiser. Например:
XmlSerializer serializer = new XmlSerializer (typeof (CarParkResponse), новый Type [] {typeof (CarParkParameters), typeof (CarParkInformation)});
Я пошел с последним.
Что я пытаюсь сделать
Поскольку производные классы являются отдельными и имеют одни и те же свойства, я пытаюсь сериализовать полученный класс в качестве подкласса.
Другими словами, десериализовать CarParkResponse, унаследованный как CarParkResponse.
В "CarParkResponseInherited" я использую объявление XmlTypeAttribute ("CarParkResponse").
Изначально это вызывает проблему при сериализации
Типы 'CarParkResponseInherited' и 'CarParkResponse' оба используют имя типа XML, 'CarParkResponse', из пространства имен ''. Используйте атрибуты XML, чтобы указать уникальное имя XML и / или пространство имен для типа. "
так как тип уже используется "CarParkResponse", поэтому я объявил XmlType ("Response") в "CarParkResponse", чтобы обойти это.
Проблема
Я сейчас пытаюсь десериализовать возвращенный XML, но теперь у меня возникает следующая проблема.
Указанный тип не был распознан: name = 'CarParkResponse', namespace = '', at OriginalRequest xmlns = ''
К сожалению, CarParkResponse здесь. Мне интересно, если это связано с тем, что я использовал XmlType ("Response") в классе, и сериализатор не распознает класс как тип CarParkResponse
Так что мой вопрос
Можно ли передать производный класс как подкласс и десериализовать его как подкласс с использованием XmlSerializer?
Я экспериментировал с созданным xml.
Например, если я не использую теги сериализации (такие как XmlType () и т. Д.) Где-либо в моем коде. Созданный xml создаст элемент carparkresponse с «типом» в качестве атрибута.
Значение равно "CarParkResponseInherited". Я написал некоторый код, который удаляет «Inherited» из значения, которое позволяет его десериализовать.
Этот подход явно не очень хорош, поэтому я надеюсь, что есть хороший способ обойти это.
Итак ...
если есть кто-то, у кого есть терпение, чтобы прочитать этот пост и может помочь или дать совет, это будет очень ценно, так как у меня нет идей.
Спасибо.