2015-07-28 19 views
5

La mia API Web sta inviando questo JSON.Come deserializzare JSON (multi livello) in C#

{ "data":[ 
    { 
    "cat_id":"1", 
    "category":"Clothing", 
    "img_url":"sampleUrl.com" 
    }, 
    { 
    "cat_id":"2", 
    "category":"Electronic Shop", 
    "img_url":"sampleUrl.com" 
    }, 
    { 
    "cat_id":"3", 
    "category":"Grocery", 
    "img_url":"sampleUrl.com" 
    }, 
    { 
    "cat_id":"4", 
    "category":"Hardware", 
    "img_url":"sampleUrl.com" 
    } 

    ]} 

ho cercato di deserializzare questo JSON usando sotto C# codice

var result = JsonConvert.DeserializeObject<List<AllCategories>>(content); 

ma viene generata un'eccezione.

Impossibile deserializzare l'oggetto JSON corrente (ad esempio, { "name": "valore"}) in tipo 'System.Collections.Generic.List`1 [EzyCity.AllCategories]' perché il tipo richiede una matrice JSON (es. [1,2,3]) per deserializzare correttamente.

AllCategories classe

public class AllCategories 
{ 
    private string cat_id; 
    private string category; 
    private string img_url; 

    public string Cat_Id 
    { 
     get { return cat_id; } 
     set { cat_id = value; } 
    } 

    public string Category 
    { 
     get { return category; } 
     set { category = value; } 
    } 

    public string Image_Url 
    { 
     get { return img_url; } 
     set { img_url = value; } 
    } 
} 

Che cosa dovrebbe essere fatto per deserializzare questo tipo di JSON?

+0

risposta possibile a http://stackoverflow.com/questions/31531441/retrieve-required-string-from-bigger-json-string –

risposta

6

tuo json è un oggetto con una matrice come il seguente:

public class ObjectData 
{ 
    public List<AllCategories> data{get;set;} 
} 

Pertanto è necessario desirialize la Json nell'oggetto:

var result = JsonConvert.DeserializeObject<ObjectData>(content); 
5

avete bisogno di qualcosa di simile

public class Datum 
{ 
    public string cat_id { get; set; } 
    public string category { get; set; } 
    public string img_url { get; set; } 
} 

public class RootObject 
{ 
    public List<Datum> data { get; set; } 
} 

quindi utilizzare

var result = JsonConvert.DeserializeObject<RootObject>(content); 

di de-serializzare

+1

upvoted (non solo) perché si usa la singolarizzazione corretta dei "dati" :) –

Problemi correlati