从服务合同使用XmlSerializerFormatAttribute

时间:2017-06-19 09:44:50

标签: json wcf xmlserializer wcf-endpoint

让我先说一下我的问题。

我开始研究一个必须使用我们的API的Xamarin应用程序。 API通过两个端点上的WCF服务公开,它是tcp或基本http。由于Xamarin平台的局限性,我最终使用了HttpWebClient,我不得不将我的WCF服务变得安静。这就是问题开始出现的地方。

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

如果我删除了XmlSerializerFormatAttribute,我的服务将返回JSON,但现在我没有XML。通过创建另一个默认返回值为XML的端点可以很容易地解决这个问题,但现在问题变得更加有趣了,因为我的一些类不能正确地序列化,我现在就解释一下。

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

这可能吗?

1 个答案:

答案 0 :(得分:0)

使用XmlSerializerFormat后,您告诉WCF在XmlSerializer上使用DataContractSerializer课程。 WCF中没有内置任何可以使其返回JSON 的机制,因为您已明确告诉它使用XmlSerializer

如果要返回XML或JSON内容,可以通过创建自己的IDispatchMessageFormatter实现来完全填写邮件格式。然后,完全取决于您使用您希望的任何规则来格式化您的消息。