2010-05-20 27 views
4

如何使Web服務方法以行格式返回字符串值?如何使Web服務方法以行格式返回字符串值?

我的Web服務的方法是這樣的

[WebMethod] 
public string GetSomeLines() 
{ 
    System.Text.StringBuilder builder = new StringBuilder(); 
    builder.AppendLine("Line1."); 
    builder.AppendLine("Line2."); 
    builder.AppendLine("Line3."); 
    return builder.ToString(); 
} 

但是,當我從Web瀏覽器或從德爾福/ C#的消費者,結果會是這樣:

Line1. Line2. Line3. 

雖然我希望見:

Line1. 
Line2. 
Line3. 

我知道可能會返回一個StringBuilder或字符串數​​組在這裏是一個選項,但我w螞蟻知道是否有一種方法可以用字符串結果做到這一點。

感謝您的幫助。

回答

4

StringBuilder的AppendLine方法添加了缺省行結束符到附加字符串的末尾。默認行結束符是Environment.NewLine屬性的當前值,非Unix平臺爲「\ r \ n」,Unix平臺爲「\ n」。因此,WebMethod試圖返回的內容如下:

「Line1。\ r \ nLine2。\ r \ nLine3。\ r \ n」。

然而,返回值是根據通過截斷SOAP規範序列爲 「\ r」,結果看起來略有不同: 「一號線\ nLine2 \ nLine3 \ n」 個

如果服務使用者在Windows平臺上運行,它可能會忽略單個「\ n」字符作爲垃圾。可能的解決方案:

  1. 將返回值編碼爲另一種格式,例如,轉換爲字節數組: return builder.ToString().ToCharArray();

  2. 用另一個可能由調用者提供的字符串替換NewLine,例如,變成BR標記: return builder.Replace(Environment.NewLine, "<br/>").ToString();

  3. 返回所有行分隔的行或任何其他容器的數組。

+0

感謝SlavaGu,是的,這正是發生在這裏,謝謝你的好解釋。我認爲沒有辦法用「準備使用」字符串結果來做到這一點。我必須使用不同的/修改的換行符。但我會接受這個答案。謝謝 :-) – 2010-05-21 18:11:41

1

可以在每個端添加 '\ r \ n' 字符追加:

builder.Append( 「線路1 \ r \ n」);

或像你說:appendLine

builder.AppendLine;( 「1號線」)。

之後,根據您的消費者, 您可以用不同的新行字符串替換'\ r \ n'。 對於瀏覽器

<br/>標記。

+0

+1謝謝Alex Pacurar! – 2010-05-21 18:12:47

0

在追加時使用environement.newline。

相關問題