ServiceStack использует . NET XML DataContractSerializer для сериализации ваших DTO по умолчанию. Если это не подходит, вы можете зарегистрировать свой собственный XML сериализатор типа контента для принятия XML сериализации, которая включает в себя пример для замены используемого DataSontractSerializer ServiceStack по умолчанию. * XXSerializer NET .
Я пытался вернуть его как необработанный XML в строковом свойстве DTO (используя JsonConvert.DeserializeXNode), но затем символы xml в строке экранируются, в окончательный ответ ServiceStack.
Это неверно, ServiceStack позволяет возвращать ряд необработанных типов данных , таких как необработанные XML string
, которые записываются непосредственно в ответ OutputStream
, возможно, что-то еще ускользает от него после его записи в ответ (например, веб-сервер или клиент), но это не ServiceStack.
Альтернативная стратегия управления XML Сериализация - копировать их в DTO, снабженные атрибутами DataContract
или XmlSerializer
, которые позволят вам контролировать сериализацию XML, однако это было бы утомительно для динамических данных c, из которых XML, как правило, является плохим выбором в качестве сериализации. NET обобщенные c коллекции данных производят уродливые XML.
Спецификации типа содержимого c Реализации
Если вам нужно только обработать t он XML для этой одной службы, вместо переопределения реализации XML Serializer по умолчанию, вы можете использовать спецификацию типа содержимого c реализаций ServiceStack для обработки XML запросов по-другому, например:
public class MyServices : Service
{
// Handles all other unspecified Verbs/Formats
public object Any(MyRequest request) => ...;
// Handles any XML Requests
public object AnyXml(MyRequest request)
{
var dto = Any(request);
string xml = CustomXmlSerializer(dto);
return xml;
}
}