0

У меня есть некоторые службы WCF, в которых используется DataContractSerialization по умолчанию. Некоторые из методов службы возвращают объекты Dictionary. Один из клиентов генерирует XSD-файлы из служб WCF (связанный с biztalk), и он просит преобразовать все типы словарей в новый тип словаря, который реализует IXmlSerializable. Интересно, будут ли неожиданные результаты этого преобразования, которые могут повлиять на сериализацию DataContract?Словарь WCF, реализующий IXmlSerializable

Обновление: Сервер и клиент совместно используют одни и те же DLL-файлы, клиенты не генерируют их из службы. Возможно, в вопросе у меня не хватало главного момента; Интересно, должен ли объект быть сериализован через сериализацию datacontract, реализация IXmlSerializable в объекте вызовет любые проблемы.

ответ

0

Возникла непредвиденная проблема; поскольку объекты домена уже реализуют сериализацию контрактов данных, не существует способа реализовать IXmlSerializable без изменения всего механизма сериализации.

0

Разделяет ли ваш клиент dll с сервисом?

Если он не делит библиотеки (dll) с сервисом, то внесение изменений в конце обслуживания не будет иметь никакого значения. Ваш WCF возвращает данные, а не классы. Эти данные восстанавливаются в классы, созданные клиентом на основе определений WSDL, возвращаемых вашей службой. Вы не можете управлять этими сгенерированными библиотеками (путем создания chnages на сервере), если вы не делитесь DLL между клиентом и сервером.

Если он хочет обернуть сгенерированные словари в словаре IXmlSerializable, то он может, или если он хочет сгенерировать словарь другого типа, то он, вероятно, тоже может это сделать, но я не думаю, что есть что-то, что вы можно сделать сервер сторона.

+0

клиент и сервис совместно используют одни и те же DLL домена. Возможно, в вопросе у меня не хватало главного момента; Интересно, должен ли объект быть сериализован через сериализацию datacontract, реализация IXmlSerializable в объекте вызовет любые проблемы. – daryal

0

Сообщите клиент использовать следующую сериализуемую словарь, когда им нужно сериализовать словарь результата от вызова службы: C# Serializable Dictionary – a Working Example

Он принимает обычный словарь в качестве аргумента конструктора, таким образом, превращает любой словарь в сериализуемую один. Вы также можете вернуть SerializableDictionary в качестве результата вызова службы, если хотите.