如何使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这里是一个选项,但我想知道是否有办法用字符串结果来做这个。
感谢您的帮助。
答案 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”字符作为垃圾。可能的解决方案:
将返回值编码为另一种格式,例如到一个字节数组,所以:
return builder.ToString().ToCharArray();
将NewLine替换为调用者可能提供的另一个字符串,例如进入BR标签:
return builder.Replace(Environment.NewLine, "<br/>").ToString();
返回所有行分隔的行数组或任何其他容器。
答案 1 :(得分:1)
你可以在每个追加的末尾添加'\ r \ n'字符:
builder.Append( “线路1 \ r \ n”);
或者像你说的那样:appendLine
builder.AppendLine( “线路1”);
之后,根据您的消费者, 你可以用不同的新行字符串替换'\ r \ n'。 对于浏览器
<br/>
代码。
答案 2 :(得分:0)
在追加时使用environment.new行。