2017-08-22 3 views
-1

Hier Rückkehr ist die JSON-AntwortJson deserialize null

{ 
    "result": [ 
    { 
     "sys_id": "85071a1347c12200e0ef563dbb9a71c1", 
     "number": "INC0020001", 
     "description": "" 
    } 
    ] 
} 

Hier ist meine JSON-Klasse

public class Result 
{ 
    public string sys_id { get; set; } 
    public string number { get; set; } 
    public string description { get; set; } 
} 

public class jsonResult 
{ 
    public IList<Result> result { get; set; } 
} 

Hier ist, was ich

strReponse = rClient.makeReqest(); 
Result deserializedProduct = JsonConvert.DeserializeObject<Result>(strReponse); 
System.Windows.Forms.MessageBox.Show(deserializedProduct.number); 

Es sieht aus wie es deserialisieren tue weist meiner JSON-Klasse niemals etwas zu. Dies ist mein erstes Mal mit JSON und Web-Anrufe zu tun. Was vermisse ich? Der API-Aufruf gibt den richtigen JSON zurück, und ich habe json2csharp verwendet, um meine json-Klasse zu erstellen.

Vielen Dank!

+5

sein sollte 'JsonConvert.DeserializeObject (strReponse)' – Fabio

+0

Sie müssen in der Klasse 'jsonResult' deserialisieren (in Betracht ziehen, das umzubenennen/in die richtige Hülle zu bringen). Sie deserialisieren das Ergebnis, weshalb Ihr Code nicht funktioniert. Mach was @Fabio gesagt hat und es wird dir gut gehen. – maccettura

+0

ich „kann nicht implizit Typ servicenowaddin.jsonresult konvertieren Ergebnis deserializedProduct = JsonConvert.DeserializeObject (strReponse) servicenowaddin.result; – ffalor

Antwort

2

Sie müssen deserialize vollständiges Objekt in JSON Zeichenfolge dargestellt. Welches ist jsonResult in Ihrem Fall.

Nachdem Sie Zugriff auf Werte bekommen, müssen Sie über Eigenschaften von jsonResult

strReponse = rClient.makeReqest(); 
var deserializedResult = JsonConvert.DeserializeObject<jsonResult>(strReponse); 
var number = deserializedResult.result.First().number; 
MessageBox.Show(number); 

Da jsonResult.result vom Typ IList wird durch alle möglichen Ergebnisse Schleife sicherer

strReponse = rClient.makeReqest(); 

var deserializedResult = JsonConvert.DeserializeObject<jsonResult>(strReponse); 
foreach (var result in deserializedResult.result) 
{ 
    MessageBox.Show(result.number); 
} 
0

Sie sollten deserialize zu jsonResultNICHTResult.

diese So versuchen:

jsonResult deserializedProduct = JsonConvert.DeserializeObject<jsonResult>(strReponse); 

Auch Sie können Werte der Liste wie folgt erhalten:

var firstResult = deserializedProduct.result.FirstOrDefault(); 
var someSpecialResults = deserializedProduct.result.Where(r=>r.number.Contains("123")); 

auch:

if (firstResult != null) 
    System.Windows.Forms.MessageBox.Show(firstResult .number); 

auch sie wie folgt Sie iterieren kann:

deserializedProduct.result.ForEach(r=> System.Windows.Forms.MessageBox.Show(r.number);) 

Ich hoffe, für Sie hilfreich zu sein :)