2011-12-28 85 views
1

我的RESTful WCF 3.5服務接受包含自由格式字符串字段的XmlSerialized(而不是DataContract序列化)數據對象。WCF 3.5 REST - 將數據成員 r n替換爲 n

我寫的客戶端(它使用的HttpWebRequest/HttpWebResponse與WCF服務進行交互)發送XML這樣的:

<product> 
    <description>Foo\r\nBar\r\n\r\nFinal line</description> 
</product> 

(CR和LF字符在這裏逃過易讀性,現實中的原始ASCII字節0x0A和0x0D在Wireshark中發送,如Wireshark所確認的)。

但是,我的WCF服務的[OperationContract]標記方法都報告Product.Description屬性的值爲「Foo \ nBar \ n \ nFinal line」。這發生在我的任何代碼被調用之前。

在WCF的某個地方,字符串中的\ r \ n換行符將被刪除並替換爲\ n換行符,但我無法看到發生在何處或原因。

回答

3

這實際上是由XML規範要求的 - http://www.w3.org/TR/REC-xml/#sec-line-ends:「XML處理器必須像分析前通過翻譯兩個字符序列一樣,對輸入上的外部解析實體(包括文檔實體)中的所有換行符進行標準化#xD #xA和任何#xD後面沒有#xA的單個#xA字符「。

如果您希望保留「\ r」,則必須在將它發送到服務器之前將其轉義(到&#xD;),以免它得到標準化。

<product> 
    <description>Foo&#xD;\nBar&#xD;\n&#xD;\nFinal line</description> 
</product> 

如果你生產這個XML與XmlWriter,您可以創建一個傳遞XmlWriterSettings設置爲NewLineHandling.Entitize其NewLineHandling屬性,這會爲你做。

+0

太好了,謝謝! – Dai 2011-12-30 16:36:44