2017-01-04 2 views
-2

Ich kann einfach nicht herausfinden, diese eine. Versuchte bereits mit JsonConvert.SerializeObject (Element) und ich habe auch eine seltsame Zeichenfolge.Parsing diese Art von JSON Stringed String "{" Wert ": [" 18 "]}"

Wie kann ich aus dieser Zeichenkette heraus Wert verlieren?

"{\"value\":[\"18\"]}" 

bearbeiten @

Dies ist, wo ich es stringify:

var data = new FormData(); 
    data.append('cates', JSON.stringify(toSend)); 

und hier ist das, was ich Ausgang von Modell> Requisiten Liste erhalten

https://gyazo.com/b9a6f212345b854796af3d80e4169a23

@deserializing

 foreach (var item in data.cates) 
     { 
      var l = JsonConvert.DeserializeObject(item); 
     } 
+0

warum hat Ihr json haben die \“Zeichen ?. Was passiert, wenn Sie diese Zeichenfolge ersetzen, bevor Deserialisieren ?. Versuchen Sie das mal aus dem String entfernt – NicoRiff

+1

Sie gehen zu müssen, mehr Kontext liefern. Wo sehen Sie, dass Zeichenfolge? In einer Datei? Im C# -Quellcode? Im Visual Studio-Debugger? –

+0

Das Entweichen liegt an der JSON-Zeichenfolge ist in einer Zeichenfolge. Daher müssen die Angebote maskiert werden –

Antwort

1

Es sieht aus, als ob Ihr JSON Doppel serialisiert wurde, das heißt ein Objekt JSON serialisiert wurde, dann war die Zeichenfolge serialisiert wieder. Ein Beispiel dafür, wie dieser Fehler leicht mit asp.net-web-api gemacht werden kann, finden Sie unter JSON.NET Parser seems to be double serializing my objects.

Der beste Weg, um das Problem zu lösen, besteht darin, den JSON nicht zu zweit zu serialisieren. Wenn aus irgendeinem Grund dies nicht (weil zB das Doppel-serialisierten JSON wird von einem 3rd-Party-Service zurück Sie nicht ändern können) befestigt werden kann Sie können immer doppelt so gut deserialisieren:

var json = @"""{\""value\"":[\""18\""]}"""; 

Console.WriteLine("JSON: "); 
Console.WriteLine(json); // Prints "{\"value\":[\"18\"]}" 

var intermediateJson = JsonConvert.DeserializeObject<string>(json); 
var root = JsonConvert.DeserializeObject<RootObject>(intermediateJson); 

Console.WriteLine("Reserialized root: "); 
Console.WriteLine(JsonConvert.SerializeObject(root)); // Prints {"value":["18"]} 
Console.WriteLine("value:"); 
Console.WriteLine(root.value.First()); // Prints 18 

verwenden, für eine Wurzelobjekt:

public class RootObject 
{ 
    public List<string> value { get; set; } 
}