2014-01-22 67 views
1

如何使用JsonConvert.DeserializeObject下面的JsonJson的反序列化在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

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對象。

而​​JsonConvert.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);