Deserialize JSON with C#

前端 未结 10 1483
一生所求
一生所求 2020-11-21 05:57

I\'m trying to deserialize a Facebook friend\'s Graph API call into a list of objects. The JSON object looks like:

{\"data\":[{\"id\":\"518523721\",\"name\"         


        
相关标签:
10条回答
  • 2020-11-21 06:19

    Here is another site that will help you with all the code you need as long as you have a correctly formated JSON string available:

    https://app.quicktype.io/

    0 讨论(0)
  • 2020-11-21 06:24

    Very easily we can parse JSON content with the help of dictionary and JavaScriptSerializer. Here is the sample code by which I parse JSON content from an ashx file.

    var jss = new JavaScriptSerializer();
    string json = new StreamReader(context.Request.InputStream).ReadToEnd();
    Dictionary<string, string> sData = jss.Deserialize<Dictionary<string, string>>(json);
    string _Name = sData["Name"].ToString();
    string _Subject = sData["Subject"].ToString();
    string _Email = sData["Email"].ToString();
    string _Details = sData["Details"].ToString();
    
    0 讨论(0)
  • 2020-11-21 06:26

    You need to create a structure like this:

    public class Friends
    {
    
        public List<FacebookFriend> data {get; set;}
    }
    
    public class FacebookFriend
    {
    
        public string id {get; set;}
        public string name {get; set;}
    }
    

    Then you should be able to do:

    Friends facebookFriends = new JavaScriptSerializer().Deserialize<Friends>(result);
    

    The names of my classes are just an example. You should use proper names.

    Adding a sample test:

    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);
    }
    

    Produces:

    id: 518523721, name: ftyft
    id: 527032438, name: ftyftyf
    id: 527572047, name: ftgft
    id: 531141884, name: ftftft
    
    0 讨论(0)
  • 2020-11-21 06:27

    Sometimes I prefer dynamic objects:

    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);
    }
    
    0 讨论(0)
提交回复
热议问题