Если вы возвращаете строку в формате XML, вы не можете просто вернуть строку «как есть», иначе у вас может не быть действительного XML, так что да, это стандартное поведение (ответ по умолчанию - это то, как DataContractSerializer будет сериализовать результат).
Если вы не хотите, чтобы данные были перенесены, вы можете перейти в необработанный режим, вернув поток (подробнее см. http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx).). Если вы все еще хотите вернуть тип CLR, но хотите контролировать Формат сериализации, вы можете создать контракт данных для использования или создать тип, украшенный атрибутами сериализации XML (XmlElementAttribute
, XmlTextAttribute
, XmlAttributeAttribute
и т. д.) и пометить операцию (или сам контракт) с помощью XmlSerializerFormatAttribute
.