2014-01-22 37 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);