首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用C#反序列化JSON

使用C#反序列化JSON
EN

Stack Overflow用户
提问于 2011-10-26 04:00:12
回答 7查看 666K关注 0票数 220

我正在尝试将一个Facebook朋友的Graph API调用反序列化为一个对象列表。JSON对象如下所示:

代码语言:javascript
复制
{"data":[{"id":"518523721","name":"ftyft"},
         {"id":"527032438","name":"ftyftyf"},
         {"id":"527572047","name":"ftgft"},
         {"id":"531141884","name":"ftftft"},
         {"id":"532652067","name"...

List<EFacebook> facebooks = new JavaScriptSerializer().Deserialize<List<EFacebook>>(result);

它不工作,因为原始对象是无效的。我如何反序列化它?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-10-26 04:04:51

您需要创建一个结构,如下所示:

代码语言:javascript
复制
public class Friends
{

    public List<FacebookFriend> data {get; set;}
}

public class FacebookFriend
{

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

然后,您应该能够执行以下操作:

代码语言:javascript
复制
Friends facebookFriends = new JavaScriptSerializer().Deserialize<Friends>(result);

我的类名只是一个例子。您应该使用适当的名称。

添加示例测试:

代码语言:javascript
复制
string json =
    @"{""data"":[{""id"":""518523721"",""name"":""ftyft""}, {""id"":""527032438"",""name"":""ftyftyf""}, {""id"":""527572047"",""name"":""ftgft""}, {""id"":""531141884"",""name"":""ftftft""}]}";

Friends facebookFriends = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Friends>(json);

foreach(var item in facebookFriends.data)
{
    Console.WriteLine("id: {0}, name: {1}", item.id, item.name);
}

产生:

代码语言:javascript
复制
id: 518523721, name: ftyft
id: 527032438, name: ftyftyf
id: 527572047, name: ftgft
id: 531141884, name: ftftft
票数 281
EN

Stack Overflow用户

发布于 2014-02-25 14:22:06

有时我更喜欢动态对象:

代码语言:javascript
复制
public JsonResult GetJson()
{
  string res;
  WebClient client = new WebClient();

  // Download string
  string value = client.DownloadString("https://api.instagram.com/v1/users/000000000/media/recent/?client_id=clientId");

  // Write values
  res = value;
  dynamic dyn = JsonConvert.DeserializeObject(res);
  var lstInstagramObjects = new List<InstagramModel>();

  foreach(var obj in dyn.data)
  {
    lstInstagramObjects.Add(new InstagramModel()
    {
      Link = (obj.link != null) ? obj.link.ToString() : "",
      VideoUrl = (obj.videos != null) ? obj.videos.standard_resolution.url.ToString() : "",
      CommentsCount = int.Parse(obj.comments.count.ToString()),
      LikesCount = int.Parse(obj.likes.count.ToString()),
      CreatedTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds((double.Parse(obj.created_time.ToString()))),
      ImageUrl = (obj.images != null) ? obj.images.standard_resolution.url.ToString() : "",
      User = new InstagramModel.UserAccount()
             {
               username = obj.user.username,
               website = obj.user.website,
               profile_picture = obj.user.profile_picture,
               full_name = obj.user.full_name,
               bio = obj.user.bio,
               id = obj.user.id
             }
    });
  }

  return Json(lstInstagramObjects, JsonRequestBehavior.AllowGet);
}
票数 55
EN

Stack Overflow用户

发布于 2016-06-18 06:05:50

为您自动生成这些类的一个很好的方法是复制您的JSON输出并将其放入此处:

http://json2csharp.com/

它将为您提供一个起点来修饰您的类以进行反序列化。

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7895105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档