2016-10-31 5 views
1

Ich habe Probleme beim Deserialisieren des von einer externen Quelle empfangenen JSON. Ich bin mir nicht sicher, aber ich denke, es könnte der JSON selbst sein, der falsch ist, sonst mache ich alles falsch. Könnte jemand ein Licht darauf werfen?Ungültiges Format der JSON-Antwort?

Dies ist die JSON Ich erhalte:

{"results": {"result": 32}},{"statistics": {"positive": 47.3,"negative": 49.6,"breakeven": 3.1}} 

Das sind meine Klassen:

public class dataClass 
{ 
    public resultsClass results { get; set; } 
    public statisticsClass statistics { get; set; } 
} 

public class resultsClass 
{ 
    public int result { get; set; } 
} 

public class statisticsClass 
{ 
    public Double? positive { get; set; } 
    public Double? negative { get; set; } 
    public Double? breakeven { get; set; } 
} 

Und das ist, wie ich deserialisieren:

dataClass output = JsonConvert.DeserializeObject<dataClass>(response); 

Wenn ich versuche, Deserialize dies, ich bekomme den Fehler:

Additional text encountered after finished reading JSON content

Und ich habe es auf das Komma zwischen den Ergebnissen und den Statistiken festgesteckt. Ich denke, dass die schließende Klammer der Ergebnisse und die öffnende Klammer der Statistiken nicht da sein sollten.

Oder bin ich deserializing falsch?

+2

Der Text * * falsch ist. Sie haben zwei getrennte Wörterbücher mit einem ',' zwischen ihnen. Sie müssen die gesamte Zeichenfolge mit '{}' umgeben. –

+0

Probieren Sie zuerst ein Objekt serialisieren *, um zu sehen, wie es aussehen sollte –

+0

Sie haben zwei separate gültige Bits von JSON mit einem Kommatrennzeichen verkettet. Wenn Sie die Antwort in zwei Teile aufteilen können, können Sie jedes Bit einzeln deserialisieren. – Equalsk

Antwort

1

Wenn Sie die json in einen Texteditor analysieren Sie, dass in dieser Antwort sehen Sie Doppelwurzelelement haben. das Ergebnis, und die Statistiken sind getrennt.

Sie müssen Wahl:

  1. trennen die Zeichenfolge json: Sie haben die zwei Wurzelelement zu spalten und die JsonConvert.DeserializeObject<dataClass>(response); für jede Stammelement
  2. Ändern Sie die Json Antwort stucture (empfohlen) aply: Die Antwort von json ist falsch !! Wenn Sie der Besitzer der Antwort sind, können Sie die Antwort ändern: { "results": { "result": 32 }, "statistics": { "positive": 47.3, "negative": 49.6, "breakeven": 3.1 } } und sollte mit Ihrem Code arbeiten.

Grüße,

4

Ihr JSON ist falsch formatiert.
Nach this sites Validierung:

Error: Parse error on line 5: 
...  "result": 32 }}, { "statistics": { 
--------------------^ 
Expecting 'EOF', got ',' 

Dies funktioniert:

{ 
    "results": { 
     "result": 32 
    }, 
    "statistics": { 
     "positive": 47.3, 
     "negative": 49.6, 
     "breakeven": 3.1 
    } 
} 
+0

Das habe ich vermutet. Das Problem ist jedoch, dass es sich um ein JSON handelt, das von einem Dritten bereitgestellt wird, von dem ich keine Kontaktdaten habe. Gibt es eine einfache Möglichkeit, das zu beheben? Im Moment denke ich daran, die Antwort neu zu formatieren. – Cainnech

+0

Ja. Reformat oder lass sie wissen, dass sie dir Müll schicken. [Hier] (http://stackoverflow.com/questions/3710204/how-to-check-if-a-string-is-a-valid-json-string-in-javascript-without-ustry-try) ist ein Link zur Überprüfung –

Verwandte Themen