无法在c#中将返回的字符串从服务转换为int

时间:2017-07-21 07:41:29

标签: c# type-conversion

我创建了一个服务,你可以看到:

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?

enter image description here

这是我的服务界面

   [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "/ValidateAndSubmitReception", RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json)]

        string ValidateAndSubmitReception(NajaResult NajaResult);

3 个答案:

答案 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);