2017-07-21 24 views
0

でintにサービスから返された文字列を変換できません:は、私はあなたが見ることができるようにサービスを作成するC#の

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に変換したい。何故?ここで

enter image description here

私のサービス・インターフェース

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

     string ValidateAndSubmitReception(NajaResult NajaResult); 
+1

正確な文字列は '-1'ではないので、' '-1" 'です。 –

+0

引用符を削除する必要があります。 '-1 'ではなく、' -1'ではありません – zzT

+0

あなたの文字列には次の文字列が含まれています。 "Convert.ToInt32(Result.ToString())" –

答えて

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

+0

あなたの素晴らしい答えをありがとう。 –

1

問題:それはあなたがそれを解析しようとしている方法が解析されないように、あなたの文字列が、その中に引用符(")が含まれています。

ソリューション:あなたが最初String.Replaceの方法を使用して引用符(")を削除し、文字列を解析してみてください。

コード:あなたは、次のとint.parse文を交換する必要があります。

return int.Parse(Result.Replace("\"", string.Empty)); 
+0

私はそれが実際には「問題:サービスがJSONを返していますが、プレーンテキストとして扱っています」と言います。それに対する解決策は、レスポンスを代わりにJSONとして扱うことです。 –

+0

私はそれを問題の背後にある可能性のある理由だから問題にしています。 –

+0

私の主張は、根本的な理由ではなく、最初の症状を見ているということです。サービスがJSONを受け入れて返す場合は、JSONとして扱います。 –

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); 
+0

ありがとうございます –

関連する問題