2016-04-22 17 views
0

Ich habe eine JSON-Zeichenfolge, die ein Zeichenfolgenliteral als Wert eines Objekts - PostData enthält.Deserialize JSON Zeichenfolge, die singlequote enthält C#

string json = "{\"PostData\": '{\"LastName\": \"O Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}"; 

Ich versuche, die json deserialisieren mit:

var obj = JsonConvert.DeserializeObject<dynamic>(json); 

dann kann ich meine Json String-Wert von PostData wie verwenden:

obj["PostData"].ToString() 

Aber sobald ich die Daten mit einfachen Anführungszeichen darin, wie zum Beispiel:

string json = "{\"PostData\": '{\"LastName\": \"O' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}"; 

Ich bekomme eine Ausnahme bei der Deserialisierung. Wie kann ich dem einfachen Zitat entkommen?

Ich habe SO für ähnliche Probleme überprüft, aber nichts funktioniert. Ich habe auch versucht, eine der Lösung int seine thread erwähnt:

JsonSerializerSettings settings = new JsonSerializerSettings 
{ 
    StringEscapeHandling = StringEscapeHandling.EscapeHtml 
}; 

JsonConvert.SerializeObject(obj, settings); 

Aber ich Newtonsoft doesnot defination enthalten für StringEscapeHandling.

Auch versucht, die singlequote mit in der Zeichenfolge mit \: '{\"LastName\": \"O\' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}' zu entkommen, die auch nicht funktioniert.

+0

I Angenommen, die beste Wahl besteht darin, das Objekt zuerst sorgfältig zu serialisieren. Welche Version von Newtonsoft.Json wird verwendet? 'StringEscapeHandling.EscapeHtml' existiert in der neuesten' 8.0.3' Version und funktioniert gut. –

Antwort

2

Zunächst einmal könnte es erwähnenswert sein, dass der JSON syntax einfache Anführungszeichen verwendet, in denen Sie doppelte Anführungszeichen verwendet haben. Hier ist eine Anleitung für die richtige Syntax:

JSON Syntax

Jetzt leider nicht JSON nicht zulassen, dass die Verwendung von einfachen Anführungszeichen wie das, aber wir können die Unicode-\u0027 für einen Apostroph verwenden und die Verwendung von JSON der Serializer Einstellungen vornehmen, wie du hast es schon getan. So Ihre Original-String:

string json = "{\"PostData\": '{\"LastName\": \"O' Corner\",\"FirstName\":\"Mark\",\"Address\":\"123 James St\"}'}"; 

wird:

string json = "{'PostData': {'LastName': 'O\u0027 Corner','FirstName':'Mark','Address':'123 James St'}}" 

Das setzt voraus, dass Sie ein Stringliteral parsen, sonst würden Sie die Unicode entkommen müssen, um geben:

string json = "{'PostData': {'LastName': 'O\\u0027 Corner','FirstName':'Mark','Address':'123 James St'}}"