2017-06-19 20 views
0

讓我先描述一下我的問題。從服務合約標記爲XmlSerializerFormatAttribute的WCF服務中返回JSON

我開始使用我們的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。

這可能嗎?

回答

0

一旦你使用XmlSerializerFormat你告訴WCF使用XmlSerializer類而不是DataContractSerializer沒有內置於WCF的機制,現在可以返回JSON,因爲您明確告訴它使用XmlSerializer

如果您想要返回XML或JSON內容,您可以通過創建自己的IDispatchMessageFormatter實施來充分掌握您的消息格式。這將完全取決於您如何使用您所希望的任何規則來設置您的信息。

+0

我看了一下IDispatchMessageFormatter,它不是微不足道的實現。這些例子很少見,他們都使用Json tfor展示。該死的WCF! – Rob