如何使用Javascript Serializer进行反序列化? (ASP.net)

时间:2011-02-15 19:10:50

标签: asp.net json list serialization

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

这是我的班级。

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

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

数据在这里

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

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

3 个答案:

答案 0 :(得分:1)

创建一个类

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

并将您的代码更改为:

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

答案 1 :(得分: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);

答案 2 :(得分: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;