2017-05-04 3 views
0

Ich versuche, einen JSON-String deserialisieren, aber ich erhalte eine Fehlermeldung:JSon Deserialisierung Problem mit doppelten Anführungszeichen

var response = jss.Deserialize<Dictionary<string,string>>(responseValue); 

ich einen Fehler bekam, dass:

Type 'System.String' is not supported for deserialization of an array.

Ich denke, dass der Fehler sein wird, fixiert, wenn ich \" mit '

ist dies die Zeichenfolge

012 ändern

"{\"data\":[],\"error\":1,\"error_msg\":\"could not find associated database\",\"message\":\"Please check sr_no that you have sent\"}"

Ich mag es wie diese

"{'data':[],'error':1,'error_msg':'could not find associated database','message':'Please check sr_no that you have sent'}"

I folgend diese mit der Funktion versucht, aber nicht

für mich
responseValue.Replace("\"","'"); 
+1

Sind _sure_ Sie das ist, was die Zeichenfolge? Es sieht so aus, als wäre es nur eine Debugger-Darstellung davon. Es sieht auch so aus, als ob es JSON ist, warum sollte man seltsame String-Manipulationen machen (besonders solche, die es zu _invalid_ JSON machen) und es nicht einfach als JSON behandeln? –

+1

Ihr Code funktioniert https://dotnetfiddle.net/nwqUqM – fubo

+0

Ja, es ist eine Debugger-Darstellung @JamesThorpe. Was tatsächlich passiert ist, dass ich jesn deserialisiere mit var response = jss.Deserialize > (responseValue); aber ich habe einen Fehler bekommen, dass "Typ 'System.String' nicht für die Deserialisierung eines Arrays unterstützt wird." – SaMeEr

Antwort

4

Wenn Sie erwarten, Änderungen in denselben Variablen funktionieren Dann müssen Sie es erneut mit zurückgegebenen Ergebnissen festlegen.

responseValue = responseValue.Replace(@"\"","'"); 
+1

Das sollte entweder' .Replace (@ "\" "", "'") ',' sein .Replace (@ "" "," '")' oder '.Replace (" \ "", "'") '. Der aktuelle Code wird nicht kompiliert. – Kobi

+0

Das Ersetzen des Anführungszeichens wird keine JSON-Deserialisierungsfehler beheben. Es kann sie aber * verursachen *, wenn der String eingebettete einfache Anführungszeichen enthält. –

+0

Einverstanden, aber die Frage wird auf den Nennwert gestellt. OP wird bekommen, was er von dieser Antwort braucht. Wie das in das Gesamtbild passt, muss von ihm gelöst werden. –

0

versuchen Sie dies:

String s = "{\"data\":[],\"error\":1,\"error_msg\":\"could not find associated database\",\"message\":\"Please check sr_no that you have sent\"}"; 

s= s.Replace("\"", "'"); 
0
string responseValue = "{\"data\":[],\"error\":1,\"error_msg\":\"could not find associated database\",\"message\":\"Please check sr_no that you have sent\"}"; 
Console.WriteLine(responseValue.Replace("\"", "'")); 

Check the output

Wenn Sie diesen Wert zurückgeben möchten, dann ist es in einer Variablen speichern und diese Variable zurück. Hoffe, meine Antwort hat dir geholfen. Wenn irgendetwas unten kommentieren.

0

Die Fehlermeldung erläutert das Problem: Sie versuchen, eine Zeichenfolge, die Array-Eigenschaften enthält, in ein Zeichenfolgenwörterverzeichnis zu deserialisieren. Sie können ein Array nicht in eine Zeichenfolge einfügen, also Type 'System.String' is not supported for deserialization of an array..

Insbesondere die data Eigenschaft ist ein leeres Array:

'data':[] 

Das hat nichts mit dem Zitat Charakter zu tun. JSON funktioniert gut mit Einzel- oder Doppelzeichen.

Sie müssen einen geeigneten Typ für die Deserialisierung angeben. Sie können die Eigenschaften zu object, dynamic deserialisieren oder eine Klasse erstellen, die die JSON Text übereinstimmt, zB:

var response = jss.Deserialize<Dictionary<string,object>>(responseValue); 

Oder:

class MyError 
{ 
    public string[] data{get;set;} 
    public string error_msg {get;set;} 
    public string message {get;set;} 
} 

var response = jss.Deserialize<MyError>(responseValue); 
Verwandte Themen