我创建了一个服务,你可以看到:
public int ValidateAndSubmitReception(NajaResult ReceptionData)
{
ClientRequest.Headers["Content-type"] = "application/json";
serializerToUplaod = new DataContractJsonSerializer(typeof(NajaResult));
serializerToUplaod.WriteObject(ms, ReceptionData);
string Result = System.Text.Encoding.UTF8.GetString(ClientRequest.UploadData(ServiceHostName + "/ReceptionService.svc/ValidateAndSubmitReception", "POST", ms.ToArray()));
return int.Parse(Result.ToString());
//return receptionid
}
我的服务返回"\"-1\""
但是当我点击放大镜时它会显示-1,
所以,当我想转换为int时,它会抛出转换异常.Why?
这是我的服务界面
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/ValidateAndSubmitReception", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
string ValidateAndSubmitReception(NajaResult NajaResult);
答案 0 :(得分:2)
首先,忽略调试器中的反斜杠。他们误导了。你得到的字符串是:
"-1"
这是字符串的实际文本,如果您将其打印到控制台,就会看到它。
虽然你可以手动删除引号,但我个人会采取不同的策略:看起来服务正在返回JSON,所以使用JSON解析器来解析令牌......并且执行后续的int
转化:
using System;
using Newtonsoft.Json.Linq;
class Test
{
static void Main(string[] args)
{
string response = "\"-1\"";
JToken token = JToken.Parse(response);
int value = (int) token;
Console.WriteLine(value);
}
}
这样一来,如果服务返回一个完全有效的JSON值,但不是只是用引号括起来的十进制数,那么你的代码仍然可以应付。例如,支持服务决定(有效但非常规)转义' - '字符,如下所示:
"\u002d1"
这段代码没问题 - 它将取消字符串,因为它将其视为JSON 。
答案 1 :(得分:1)
问题:您的字符串中包含引号("
),因此无法按照您尝试解析它的方式进行解析。
解决方案:您应首先使用String.Replace方法删除引号("
),然后尝试解析字符串。
代码:您可能需要将int.parse
语句替换为以下内容:
return int.Parse(Result.Replace("\"", string.Empty));
答案 2 :(得分:1)
您的Result
字符串返回引号内的整数。删除它们,并尝试再次解析它。
string Result = System.Text.Encoding.UTF8.GetString(ClientRequest.UploadData(ServiceHostName + "/ReceptionService.svc/ValidateAndSubmitReception", "POST", ms.ToArray()));
Result = Result.Replace("\"", string.Empty);
return int.Parse(Result);