2011-02-15 45 views
0
public class SocialFriends 
    { 
     public string id { get; set; } 
     public string name { get; set; } 
    } 

这是我的班级。如何使用Javascript序列化器反序列化? (ASP.net)

List<SocialFriends> oList2 = ser.Deserialize<List<SocialFriends>>(response.Content); 

我得到的数据是这样的。但它返回0数据:■

数据是这里

{"data":[{"name":"George","id":"511222445"},{"name":"Mayk","id":"517247768"}]} 

我无法解释这个问题?谁能说,我的错在哪里?

回答

0

您的JSON包裹在data属性中。您必须从该data属性中获取JSON字符串。我不知道你使用的JSON序列,但根据您提供什么,最简单的方法可能只是建立一个中间DataHolder类:

public class DataHolder 
{ 
    public string Data { get; set; } 
} 

然后反序列化这样的:

var dataHolder = ser.Deserialize<DataHolder>(response.Content); 
var oList2 = ser.Deserialize<List<SocialFriends>>(dataHolder.Data); 

如果您使用的是强大的JSON序列像Json.NET,你甚至可以跳过中间反序列化,改变你的DataHolder类型为正确的类型:

public class DataHolder 
{ 
    public List<SocialFriends> SocialFriends { get; set; } 
} 

然后用这个代码来获取数据:

var dataHolder = ser.Deserialize<DataHolder>(response.Content); 
var oList2 = dataHolder.SocialFriends; 
+0

性质是不区分大小写?我一直认为它们区分大小写...... – 2011-02-15 19:40:39

+0

这完全取决于您的JSON序列化程序。我知道Json.NET不关心。 – 2011-02-15 19:44:30

1

创建一个类

class Data 
{ 
    public SocialFriends[] data { get; set; } 
} 

和你的代码更改为:

Data oList2 = ser.Deserialize<Data>(response.Content); 
1

此代码的工作。

public class SocialFriendsData 
{ 
    public List<SocialFriends> Data { get; set; } 
} 

public class SocialFriends 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
} 

反序列化:

JavaScriptSerializer ser = new JavaScriptSerializer(); 
string response = "{\"data\":[{\"name\":\"George\",\"id\":\"511222445\"},{\"name\":\"Mayk\",\"id\":\"517247768\"}]}"; 
SocialFriendsData oList2 = ser.Deserialize<SocialFriendsData>(response); 
相关问题