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

时间:2010-05-20 11:46:35

标签: c# web-services

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

我的网络服务方法如下所示

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

但是当我从网络浏览器或delphi / c#consumer获得结果时,它将是这样的:

Line1. Line2. Line3.

虽然我希望看到:

Line1.
Line2.
Line3.

我知道可能会返回一个StringBuilder或String Array这里是一个选项,但我想知道是否有办法用字符串结果来做这个。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

StringBuilder的AppendLine方法将默认行终止符添加到附加字符串的末尾。默认行终止符是Environment.NewLine属性的当前值,对于非Unix平台为“\ r \ n”,对于Unix平台为“\ n”。那么你的WebMethod试图返回的内容看起来如此:

  

“线路1。\ r \ nLine2。\ r \ nLine3。\ r \ n” 个。

但是,通过截断“\ r”,根据SOAP规范序列化返回值,结果看起来略有不同:

  

“线路1。\ nLine2 \ nLine3。\ n” 个。

如果服务使用者在Windows平台上运行,它可能会忽略单个“\ n”字符作为垃圾。可能的解决方案:

  1. 将返回值编码为另一种格式,例如到一个字节数组,所以: return builder.ToString().ToCharArray();

  2. 将NewLine替换为调用者可能提供的另一个字符串,例如进入BR标签: return builder.Replace(Environment.NewLine, "<br/>").ToString();

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

答案 1 :(得分:1)

你可以在每个追加的末尾添加'\ r \ n'字符:

builder.Append( “线路1 \ r \ n”);

或者像你说的那样:appendLine

builder.AppendLine( “线路1”);

之后,根据您的消费者,  你可以用不同的新行字符串替换'\ r \ n'。 对于浏览器

<br/>代码。

答案 2 :(得分:0)

在追加时使用environment.new行。