2010-05-20 33 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。

相关问题