2017-07-21 2 views
0

ich einen Dienst erstellen, um int wie Sie sehen können:Kann Zeichenkette nicht aus dem Dienst zurück konvertiert in 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 

} 

Mein Dienst gibt "\"-1\"", aber wenn ich auf Lupe klicken, um es zeigt mir, -1, so, wenn Ich möchte in int konvertieren es eine Ausnahme konvertieren. warum?

enter image description here

Hier meine Service-Schnittstelle

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

     string ValidateAndSubmitReception(NajaResult NajaResult); 
+1

Da die genaue Zeichenfolge nicht "-1" ist, ist es "-1". Entfernen Sie die Anführungszeichen mit 'Result.Replace (" \ "", string.Empty) 'und versuchen Sie es erneut. –

+0

Sie müssen Ihr Anführungszeichen entfernen. Es ist' "-1" ', nicht' -1' – zzT

+0

Ihre Zeichenfolge enthält quotes –

Antwort

2

Erstens, ignorieren Sie die umgekehrten Schrägstriche im Debugger. Sie sind irreführend. Die Zeichenfolge, die Sie haben, ist:

"-1" 

Das ist der eigentliche Text der Zeichenfolge ist, wie Sie es sehen würden, wenn Sie es auf der Konsole ausgegeben.

Während Sie konnte nur die Anführungszeichen manuell entfernen, würde ich persönlich einen anderen Weg nehmen: es sieht aus wie der Dienst JSON zurückgibt, so ein JSON-Parser verwenden, um die Token zu analysieren ... und die anschließende int auszuführen Umwandlung:

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); 
    } 
} 

auf diese Weise, wenn der Dienst überhaupt einen Wert, der JSON perfekt gültig ist zurück, aber ist nicht nur eine Dezimalzahl in Anführungszeichen, wird Ihr Code noch bewältigen. Zum Beispiel unterstützt der Dienst entscheidet (gültig, aber ungewöhnlich), die zu entkommen Zeichen ‚-‘, wie folgt aus:

"\u002d1" 

Dieser Code wird damit in Ordnung sein - es wird die Zeichenfolge unescape , weil sie die Behandlung ist es als JSON.

+0

Vielen Dank für Ihre tolle Antwort. –

1

Problem: Ihre Zeichenfolge enthält Anführungszeichen (") in es so wäre es nicht die Art und Weise analysiert werden Ihr es zu analysieren versuchen.

Lösung: Sie sollten die Anführungszeichen (") entfernen Sie zunächst die String.Replace Methode verwenden und dann versuchen, die Zeichenfolge zu analysieren.

Code: Sie müssen möglicherweise die int.parse Anweisung mit dem folgenden ersetzen:

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

Ich würde sagen, es ist tatsächlich "Problem: Der Dienst gibt JSON zurück, aber Sie behandeln es als Klartext." Die Lösung dazu ist, die Antwort als JSON zu behandeln statt ... –

+0

Ich nenne es ein Problem, nur weil es der mögliche Grund für das Problem ist. –

+0

Mein Punkt ist, dass Sie das Anfangssymptom und nicht den zugrunde liegenden Grund betrachten. Wenn der Dienst JSON akzeptiert und zurückgibt, behandeln Sie ihn als JSON. –

1

Ihre Result Zeichenfolge gibt die ganze Zahl innerhalb von Anführungszeichen. Entferne sie und versuche sie erneut zu parsen.

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

Vielen Dank es funktioniert –

Verwandte Themen