从其服务协定标记为 XmlSerializerFormatAttribute 的 WCF 服务返回 JSON



让我先描述一下我的问题。

我开始开发一个必须利用我们的 API 的 Xamarin 应用程序。API 通过两个终结点上的 WCF 服务公开,它是 tcp 或基本 http。由于Xamarin平台的限制,我最终使用了HttpWebClient,为此我不得不让我的WCF服务变得平静。这就是问题开始出现的地方。

我定义了另一个名为"rest"的端点,并将其配置为通过名为 DefaultOutgoingResponseFormat 的属性返回 JSON。此属性不起作用,因为我将始终以 XML 的形式获得响应。

如果我删除 XmlSerializerFormatAttribute,我的服务将返回 JSON,但现在我没有 XML。通过创建另一个默认返回值为 XML 的端点,这很容易解决,但现在问题变得更加有趣,因为我的某些类将无法正确序列化,我现在将对此进行解释。

有一个名为 XmlIgnore 的属性放置在属性上。如果您有一个名为 Name 的属性和另一个名为 NameSpecified 的属性,并且如果将此属性放在 NameSpecified 上,则在属性 NameSpecified 的值为 false 的情况下,属性 Name 将不会序列化。这非常有用,因为发送的 XML 不会挤满无用的信息。我们希望保留它,这实际上意味着我们希望保留 XmlSerializerFormatAttribute,但也能够返回 JSON。

这可能吗?

一旦你使用XmlSerializerFormat你就会告诉 WCF 在DataContractSerializer上使用XmlSerializer类。WCF 中没有内置的机制可以使其现在返回 JSON,因为您已明确告诉它使用XmlSerializer

如果要返回 XML 或 JSON 内容,可以通过创建自己的IDispatchMessageFormatter实现来完全控制消息格式。然后,完全由您决定使用您想要的任何规则格式化您的消息。

相关内容

  • 没有找到相关文章

最新更新