ServiceStack服务无法以Json和XML形式返回动态响应对象



我构建了一个服务,它组合并返回来自外部服务的一组动态json数据。以json形式返回数据是可以的,但是XML。。。

我曾尝试在DTO的字符串属性中(使用JsonConvert.DescializeXNode(将其作为原始XML返回,但在最终的ServiceStack响应中,字符串中的XML字符被转义。

我已经尝试过将数据作为动态/对象返回,json也是可以的,但XML抛出了很多DataContractSerializer运行时错误。

这本应该很简单的事情,却把我逼上了墙。有人能举一个例子吗?在这个例子中,动态数据可以通过相同的服务/操作以json和xml的形式返回(取决于Accept头(?

谢谢,伙计们。

ServiceStack使用。NET的XMLDataContractSerializer来序列化您的DTO。如果不合适,您可以注册自己的XML内容类型序列化程序来接管XML序列化,其中包括一个替换ServiceStack的默认DataContractSerializer的示例。NET的XmlSerializer。

我曾尝试在DTO的字符串属性中(使用JsonConvert.DescializeXNode(将其作为原始XML返回,但在最终的ServiceStack响应中,字符串中的XML字符被转义。

这是不正确的,ServiceStack允许您返回许多原始数据类型,如直接写入响应OutputStream的原始XMLstring,在将其写入响应后可能会有其他内容对其进行转义(例如Web服务器或客户端(,但它不是ServiceStack。

控制XML序列化的另一种策略是将它们复制到用DataContractXmlSerializer属性注释的DTO中,这将允许您控制XML的序列化方式,但对于动态数据来说,这将是乏味的,其中XML作为序列化通常是一个糟糕的选择。NET的通用数据集合生成了难看的XML。

特定于内容类型的实现

如果您只需要处理这一服务的XML,而不是覆盖默认的XML序列化程序实现,您可以使用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;
}
}

最新更新