Настраиваемая XML-сериализация WCF

В WCF, если у меня есть такой код, и я возвращаю его в формате XML, XML генерируется автоматически. Могу ли я явно указать, какой XML будет использоваться для сериализации CustomerEntity?

[OperationContract]    
[WebInvoke(Method = "GET"]
CustomerEntity GetCustomer(int customerPk);

Альтернативой, которую я сейчас использую, является возврат XElement, но проблема в том, что я не могу также поддерживать JSon таким образом.

Обновление: мои типы являются неизменяемыми и используют свойства raedonly, поэтому IXmlSerializable мне не подходит.


person wcf guru needed    schedule 06.03.2011    source источник


Ответы (2)


Реализуйте IXmlSerializable для CustomerEntity.

person Darrel Miller    schedule 06.03.2011
comment
Дополнительные рекомендации по реализации IXmlSerializable см. в разделе stackoverflow.com /вопросы/279534/ - person E.Z. Hart; 06.03.2011
comment
Оказывается, это не сработает, потому что мой тип неизменяем, поэтому я не могу реализовать from xml :( - person wcf guru needed; 06.03.2011
comment
@wcf guru Десериализация типа будет немного сложной, если он неизменяемый! - person Darrel Miller; 06.03.2011
comment
@wcf guru Можете ли вы вернуть класс CustomerEntityWrapper, реализующий интерфейс IXmlSerializable, и создать реальный объект CustomerEntity как свойство оболочки? - person Darrel Miller; 06.03.2011
comment
Идея с оберткой может сработать, если я не получу лучшего предложения, я снова приму это. Мне интересно, должен ли я просто сделать 2 разные функции с немного разными шаблонами вызовов, которые вызывают общую функцию для общей функциональности. - person wcf guru needed; 06.03.2011

Вы можете попробовать использовать необработанные сообщения, то есть использовать типы контрактов, производные от класса Message, и писать сообщения так, как вы хотите, переопределяя OnWriteBodyContents и другие переопределяемые члены класса Message. Пожалуйста, обратитесь к разделу «Наследование от класса сообщений» следующей статьи MSDN, чтобы узнать больше о переопределяемых членах класса сообщений, http://msdn.microsoft.com/en-us/library/ms734675.aspx

ХТХ, Амит

person amit    schedule 06.03.2011