2014-01-22 7 views
1

Как использовать JsonConvert.DeserializeObject с ниже JsonJson Deserialize в C#

[{ 
    "attributes" : { 
    "type" : "User", 
    "url" : "/xx/xx/xx" 
    }, 
    "Id" : "1", 
    "Name" : "abc" 
},{ 
    "attributes" : { 
    "type" : "User", 
    "url" : "/xx/xx/xx" 
    }, 
    "Id" : "2", 
    "Name" : "abc" 
},{ 
    "attributes" : { 
    "type" : "User", 
    "url" : "/xx/xx/xx" 
    }, 
    "Id" : "3", 
    "Name" : "abc" 
}] 

Это мой класс

public class Attributes 
{ 
    public string type { get; set; } 
    public string url { get; set; } 
} 

public class RootObject 
{ 
    public Attributes attributes { get; set; } 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

Я попытался с

var c = JsonConvert.DeserializeObject <RootObject>(jsonText); 
+2

Так вы его попробовали .. * и *? (Обратите внимание, что корневой объект JSON является * массивом *.) – user2864740

+1

0 Флаги, оставшиеся ... Это дубликат из 100 сообщений. –

ответ

7

Ваш Json на самом деле представляет собой массив из RootObject экземпляров. Попробуйте это:

var c = JsonConvert.DeserializeObject<RootObject[]>(jsonText); 

Или, возможно,

var c = JsonConvert.DeserializeObject<List<RootObject>>(jsonText); 

Или даже

var c = JsonConvert.DeserializeObject<IEnumerable<RootObject>>(jsonText); 
3

Ваш JSON фактически является массивом, поэтому попробуйте десериализации его в RootObject[]:

var c = JsonConvert.DeserializeObject<RootObject[]>(jsonText); 
1

You json является массив (или коллекции), попытайтесь десериализации его, используя тип массива:

var c = JsonConvert.DeserializeObject<RootObject[]>(jsonText); 

или любой другой тип коллекции, для образца:

var c = JsonConvert.DeserializeObject<IEnumerable<RootObject>>(jsonText); 
var c = JsonConvert.DeserializeObject<ICollection<RootObject>>(jsonText); 
0

Попробуйте говорить десериализатор, что вы ожидая десериализации, в данном случае RootObject. В соответствии с documentation of the method you're currently callingJsonConvert.DeserializeObject Method (String) возвращает объект .net.

В то время как this methodJsonConvert.DeserializeObject<T> Method (String) возвращает указанный тип. например:

public class Attributes 
{ 
    public string type { get; set; } 
    public string url { get; set; } 
} 

public class RootObject 
{ 
    public Attributes attributes { get; set; } 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

RootObject c = JsonConvert.DeserializeObject<RootObject>(jsonText);