2017-12-18 2 views
-1

Ich habe die folgende Erweiterungsmethode, die ich benutze, um JSON in C# zu deserialisieren.Deserialisieren von Json - Problem mit verschachtelten Parametern

public static T DeserializeJson<T>(string response) 
     where T : class 
    { 
     var s = new DataContractJsonSerializer(typeof(T)); 

     try 
     { 
      using (var ms = new MemoryStream()) 
      { 
       byte[] data = System.Text.Encoding.UTF8.GetBytes(response); 
       ms.Write(data, 0, data.Length); 
       ms.Position = 0; 

       return (T)s.ReadObject(ms); 
      } 
     } 
     catch 
     { 
      return default(T); 
     } 
    } 

Dies funktioniert ordnungsgemäß.

Der Datenvertrag sieht wie folgt aus:

[DataContract] 
    public class ResponseProps 
    { 
     [DataMember(Name = "status", Order = 0)] 
     public string ResponseCode { get; set; } 

     [DataMember(Name = "lead_id", Order=1)] 
     public string LeadId { get; set; } 

     [DataMember(Name = "price", Order=2)] 
     public decimal Price { get; set; } 

     [DataMember(Name = "redirect_url", Order = 3)] 
     public string RedirectUrl { get; set; } 

     [DataMember(Name = "errors", Order = 4)] 
     public string Errors { get; set; } 
    } 

jedoch in bestimmten Situationen, die ich erhalte eine Fehlermeldung und Deserialisierung fehlschlägt.

Das Problem scheint zu sein, da die Daten in einigen der Antworten zurückgesendet werden, mit denen ich mich offensichtlich nicht richtig beschäftige. Hier sind die Daten, die das Problem verursacht zu sein scheinen:

Wer hat Ideen, wie ich das beheben?

+1

Warum, oh, warum schreiben die Leute weiter "Ich bekomme einen Fehler" anstatt die eigentliche Fehlermeldung einzufügen? * Seufz * Komm schon, du bist seit 5 Jahren ein SO-Mitglied, du solltest es besser wissen! Oh, und dein [mcve] ist weder minimal noch vollständig noch nachweisbar. Bitte beheben Sie das. (Sonst, gute Frage!) – Heinzi

+2

Fehler scheint eine Liste/Array in Ihrer Nachricht zu sein, können Sie versuchen, die Eigenschaft auf 'öffentliche Liste setzen Errors {get; einstellen; } ' – TiGreX

+0

@TiGreX weder Liste oder Array scheint als direkter Ersatz zu funktionieren –

Antwort

1

Der Typ ResponseProps.Errors sollte List<Dictionary<string, string>> sein, kein String.

+0

Das funktioniert - danke für Das. –

+0

Als eine Frage von Interesse, warum ist es nicht nur Dictionary ? –

+0

@JohnOhara '[' '] gibt an, dass es sich um ein Array oder eine Liste handelt. Siehe http://json.org. Berücksichtigen Sie, dass der Wert von 'Errors' sein kann: [{{" Duplicate Application ":" Duplicate Application "}, {" Duplicate Application ":" Duplicate Application "}]'. – skyoxZ

Verwandte Themen