如何使网络服务方法以行格式返回字符串值?
我的网络服务方法是这样的
[WebMethod]
public string GetSomeLines()
{
System.Text.StringBuilder builder = new StringBuilder();
builder.AppendLine("Line1.");
builder.AppendLine("Line2.");
builder.AppendLine("Line3.");
return builder.ToString();
}
但是当我从网络浏览器或 delphi/c# 消费者那里得到结果时,它将是这样的:
Line1. Line2. Line3.
虽然我希望看到:
Line1.
Line2.
Line3.
我知道这里可能会返回一个 StringBuilder 或字符串数组,但我想知道是否有办法用字符串结果来实现。
感谢您的帮助。
最佳答案
StringBuilder 的 AppendLine 方法将默认行终止符添加到附加字符串的末尾。默认行终止符是 Environment.NewLine
的当前值属性,对于非 Unix 平台为“\r\n”,对于 Unix 平台为“\n”。所以您的 WebMethod 试图返回的内容看起来是这样的:
"Line1.\r\nLine2.\r\nLine3.\r\n".
然而,返回值是根据 SOAP 规范通过截断“\r”进行序列化的,结果看起来略有不同:
"Line1.\nLine2.\nLine3.\n".
如果服务使用者在 Windows 平台上运行,它可能会忽略单个“\n”字符作为垃圾。可能的解决方案:
将返回值编码成另一种格式,例如成一个字节数组所以:
return builder.ToString().ToCharArray();
将 NewLine 替换为调用者可能提供的另一个字符串,例如进入 BR 标签:
return builder.Replace(Environment.NewLine, "<br/>").ToString();
返回行数组或所有行分隔的任何其他容器。
关于c# - 如何使 Web 服务方法以行格式返回字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2873322/