2017-01-10 10 views
0

Nun, ich habe jetzt mehrere Fragen über die gleiche Sache durchgemacht, verstehe immer noch nicht, wie die Newtonsoft funktioniert.Deserialisieren von JSON-Werten in eine Liste

Die Antwort von der Webseite ist,

{"status":[{"domain":"test.com","zone":"com","status":"active","summary":"active"}]} 

Ich habe die Klasse für die Analyse gemacht,

public class Status 
{ 
    public string name { get; set; } 
    public string zone { get; set; } 
    public string status { get; set; } 
    public string summary { get; set; } 
} 

Und die DeserializeObject

IList<Status> domains = new List<Status>(); 
domains = JsonConvert.DeserializeObject<List<Status>>(src); 

aber es funktioniert immer noch nicht Wenn Sie das DeserializeObject ausführen möchten, wird der Fehler

zurückgegeben
An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll but was not handled in user code 
Additional information: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[Domain_Checker.Status]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. 
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. 

Irgendwelche Ideen bitte?

+0

Hey @Ale sehen, ob die von mir zur Verfügung gestellte Lösung Ihnen geholfen hat. Bitte bestätigen Sie, dass Sie weiterhin Probleme haben. :) –

Antwort

1

nach Ihrer json, benötigen Sie ein Stammobjekt

public class Root 
{ 
    public List<Status> Status {get;set;} 
} 

var root = JsonConvert.DeserializeObject<Root>(src); 
+1

Benennen Sie 'name' ebenfalls durch' domain' um – Kalten

0

Es ist bereits zu beantworten, wie diese json auf Ihr eigenes Objekt zu analysieren. Wenn Sie das nicht benötigen, können Sie json in JObject konvertieren. Von JObject können Sie einen beliebigen Wert, den Sie wie folgt wollen abrufen:

var json = {"status":[{"domain":"test.com","zone":"com","status":"active","summary":"active"}]}; 

var jsonObject = JObject.Parse(json); 
var jsonProperty = jsonObject["status"][0]["domain"]; 
0

Für deseralizing die JSON Sie die Klassenstruktur benötigen wie diese

public class Status 
{ 
    [JsonProperty("domain")] 
    public string name { get; set; } 
    [JsonProperty("zone")] 
    public string zone { get; set; } 
    [JsonProperty("status")] 
    public string status { get; set; } 
    [JsonProperty("summary")] 
    public string summary { get; set; } 
} 

public class ClsStatus 
{ 
    [JsonProperty("status")] 
    public List<Status> status { get; set; } 
} 

Nun, wenn man genau einen Blick auf [JsonProperty("domain")] public string name { get; set; } ich verwendet habe, haben die Name anstelle von Domäne. aber immer noch wird die Deseralisierung wegen JsonProperty erfolgen.

Just Deserialize es bequem wie.

string jsonstr = File.ReadAllText("YourJSONFile"); 
ClsStatus csObj = JsonConvert.DeserializeObject<ClsStatus>(JsonStr); 
Verwandte Themen