2016-09-16 4 views
2

Ich erhalte eine JSON-Antwort von Dritten, die ich nicht kontrollieren kann. Manchmal wirft diese Antwort unzulässige Zeichen am Ende der Zeichenfolge. Hier ist ein Beispiel für die richtige.Entfernen Sie ein unzulässiges Zeichen aus der JSON-Zeichenfolge vor dem Deserialisieren in C#

{ 
    "result": [ 
     { 
      "parent": "", 
      "made_sla": "true", 
      "caused_by": "", 
      "watch_list": "", 
      "upon_reject": "cancel", 
      "sys_updated_on": "2016-09-13 19:00:01", 
      "approval_history": "", 
      "category": "SPIN Station" 
     } 
    ] 
} 

Ein Beispiel für eine falsche Zeichenfolge. Hier sieht man endlich, dass es mehr Komma wirft, anstatt zu schließen.

{ 
    "result": [ 
     { 
      "parent": "", 
      "made_sla": "true", 
      "caused_by": "", 
      "watch_list": "", 
      "upon_reject": "cancel", 
      "sys_updated_on": "2016-09-13 19:00:01", 
      "approval_history": "", 
      "category": "SPIN Station" 
     } 
    ], 

Hier ist mein Code in C#. Kann mir jemand sagen, wie mit geschweiften Klammer in der Antwort Wert Zeichenfolge in dem folgenden Code vor Deserialisieren

WebRequest req = WebRequest.Create(@"https://aaaa.service-now.com/api/now/table/incident?sysparm_query=sys_updated_onBETWEENjavascript:gs.dateGenerate('2016-09-10','00:00:00')@javascript:gs.dateGenerate('2016-09-13','23:59:59')"); 
    req.Method = "GET"; 
    req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("username:Password")); 
    req.ContentType = "application/xml"; 

    HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 
    var responseValue = string.Empty; 
    using (var responseStream = resp.GetResponseStream()) 
    { 

      if (responseStream != null) 
       using (var reader = new StreamReader(responseStream)) 
        responseValue = reader.ReadToEnd(); 
    } 

    JavaScriptSerializer ser = new JavaScriptSerializer(); 
    ser.MaxJsonLength = 2147483647; 
    ser.RegisterConverters(new List<JavaScriptConverter> { new ResultConverter() }); 
    RootObject ro = ser.Deserialize<RootObject>(responseValue); 
+1

Schritt 1 ist es, hart gegen die Firma vorzugehen, die Ihnen schlechte Daten liefert, um ihre Sachen zu reparieren. Wenn sie kein richtiges JSON erstellen, besteht eine gute Chance, dass sie die Zeichenkette manuell erstellen, also werden sie wahrscheinlich auch andere JSON-Regeln vermasseln, die Sie nicht vorhersehen oder umgehen können. –

+3

Sind Sie sicher, dass Sie keine partielle Nachricht erhalten? – Plutonix

+0

Aber dieser Fehler kommt zufällig, manchmal wirft es und manchmal doesnot, ich denke, es ist etwas mit C# als das Unternehmen senden. Wir bekommen 50.000 Datensätze und 85 Felder für jeden Datensatz. –

Antwort

0

Ich sehe, dass Sie eine Verbindung zu ServiceNow die illegale Komma ersetzen. Das ist seltsam, wenn Sie eine fehlerhafte JSON-Zeichenfolge erhalten - ich würde ein Ticket mit hi.service-now.com

erhöhen Wenn Sie Ihre Seite korrigieren müssen, dann manipulieren Sie Ihren ResponseValue vor der Deserialisierung.

if (responseValue.Substring(responseValue.Length-2, 2)=="],") { 
responseValue = responseValue.Remove(str.Length -1, 1) + "}"; 
} 

p.s. Ich habe es nicht getestet - und Sie müssen sich die Eingabe-JSON-Zeichenfolge genau ansehen, um sicherzustellen, dass keine Leerzeichen vorhanden sind.

Verwandte Themen