2017-05-01 4 views
0

Wenn ich dies:Objekt (aus JSON) ist null?

RootobjectDribbbleShotsList ObjShots = await DribbbleShotsListProxy.GetShots(App.accesstoken, "debuts", "20", "day", "likes"); 

ObjShots leer.

Dies ist die DribbbleShotsListProxy Klasse:

using System.Diagnostics; 
using System.IO; 
using System.Net.Http; 
using System.Runtime.Serialization.Json; 
using System.Text; 
using System.Threading.Tasks; 
using System.Runtime.Serialization; 

namespace MyProject 
{ 
    public class DribbbleShotsListProxy 
    { 
     public async static Task<RootobjectDribbbleShotsList> GetShots(string token, string type, string limit, string timeframe, string sort) 
     { 

      var http = new HttpClient(); 
      var url = "https://api.dribbble.com/v1/shots?access_token=" + token + "&list=" + type + "&timeframe=" + "&sort=" + sort + "&per_page=" + limit; 
      var response = await http.GetAsync(url); 
      var result = await response.Content.ReadAsStringAsync(); 
      var serializer = new DataContractJsonSerializer(typeof(RootobjectDribbbleShotsList)); 
      var ms = new MemoryStream(Encoding.UTF8.GetBytes(result)); 
      var data = (RootobjectDribbbleShotsList)serializer.ReadObject(ms); 

      Debug.WriteLine(url); 

      return data; 
     } 
    } 


    [DataContract] 
    public class RootobjectDribbbleShotsList 
    { 
     [DataMember] 
     public ShotClass[] Shot { get; set; } 
    } 

    [DataContract] 
    public class ShotClass 
    { 
     [DataMember] 
     public int id { get; set; } 
     [DataMember] 
     public string title { get; set; }            
     [DataMember] 
     public string description { get; set; }           
     [DataMember] 
     public int width { get; set; }             
     [DataMember] 
     public int height { get; set; }             
     [DataMember] 
     public Images images { get; set; }            
     [DataMember] 
     public int views_count { get; set; }           
     [DataMember] 
     public int likes_count { get; set; }           
     [DataMember] 
     public int comments_count { get; set; }           
     [DataMember] 
     public int attachments_count { get; set; }          
     [DataMember] 
     public int rebounds_count { get; set; }           
     [DataMember] 
     public int buckets_count { get; set; }           
     [DataMember] 
     public string created_at { get; set; }           
     [DataMember] 
     public string updated_at { get; set; }           
     [DataMember] 
     public string html_url { get; set; }           
     [DataMember] 
     public string attachments_url { get; set; }          
     [DataMember] 
     public string buckets_url { get; set; }           
     [DataMember] 
     public string comments_url { get; set; }          
     [DataMember] 
     public string likes_url { get; set; }           
     [DataMember] 
     public string projects_url { get; set; }          
     [DataMember] 
     public string rebounds_url { get; set; }          
     [DataMember] 
     public bool animated { get; set; }            
     [DataMember] 
     public string[] tags { get; set; }            
     [DataMember] 
     public User user { get; set; }             
     [DataMember] 
     public Team team { get; set; }             
     [DataMember] 
     public string rebound_source_url { get; set; } 
    } 

    [DataContract] 
    public class Images 
    { 
     [DataMember] 
     public string hidpi { get; set; } 
     [DataMember] 
     public string normal { get; set; } 
     [DataMember] 
     public string teaser { get; set; } 
    } 

    [DataContract] 
    public class User 
    { 
     [DataMember] 
     public int id { get; set; } 
     [DataMember] 
     public string name { get; set; }             
     [DataMember] 
     public string username { get; set; }            
     [DataMember] 
     public string html_url { get; set; }            
     [DataMember] 
     public string avatar_url { get; set; }           
     [DataMember] 
     public string bio { get; set; }             
     [DataMember] 
     public string location { get; set; }            
     [DataMember] 
     public Links links { get; set; }             
     [DataMember] 
     public int buckets_count { get; set; }           
     [DataMember] 
     public int comments_received_count { get; set; }         
     [DataMember] 
     public int followers_count { get; set; }           
     [DataMember] 
     public int followings_count { get; set; }          
     [DataMember] 
     public int likes_count { get; set; }            
     [DataMember] 
     public int likes_received_count { get; set; }         
     [DataMember] 
     public int projects_count { get; set; }           
     [DataMember] 
     public int rebounds_received_count { get; set; }         
     [DataMember] 
     public int shots_count { get; set; }            
     [DataMember] 
     public int teams_count { get; set; }            
     [DataMember] 
     public bool can_upload_shot { get; set; }          
     [DataMember] 
     public string type { get; set; }             
     [DataMember] 
     public bool pro { get; set; }             
     [DataMember] 
     public string buckets_url { get; set; }           
     [DataMember] 
     public string followers_url { get; set; }          
     [DataMember] 
     public string following_url { get; set; }          
     [DataMember] 
     public string likes_url { get; set; }           
     [DataMember] 
     public string projects_url { get; set; }           
     [DataMember] 
     public string shots_url { get; set; }           
     [DataMember] 
     public string teams_url { get; set; }           
     [DataMember] 
     public string created_at { get; set; }           
     [DataMember] 
     public string updated_at { get; set; }           
     [DataMember] 
     public int members_count { get; set; } 
     [DataMember] 
     public string members_url { get; set; } 
     [DataMember] 
     public string team_shots_url { get; set; } 
    } 

    [DataContract] 
    public class Links 
    { 
     [DataMember] 
     public string web { get; set; } 
     [DataMember] 
     public string twitter { get; set; } 
    } 

    [DataContract] 
    public class Team 
    { 
     [DataMember] 
     public int id { get; set; } 
     [DataMember] 
     public string name { get; set; } 
     [DataMember] 
     public string username { get; set; } 
     [DataMember] 
     public string html_url { get; set; } 
     [DataMember] 
     public string avatar_url { get; set; } 
     [DataMember] 
     public string bio { get; set; } 
     [DataMember] 
     public string location { get; set; } 
     [DataMember] 
     public Links1 links { get; set; } 
     [DataMember] 
     public int buckets_count { get; set; } 
     [DataMember] 
     public int comments_received_count { get; set; } 
     [DataMember] 
     public int followers_count { get; set; } 
     [DataMember] 
     public int followings_count { get; set; } 
     [DataMember] 
     public int likes_count { get; set; } 
     [DataMember] 
     public int likes_received_count { get; set; } 
     [DataMember] 
     public int projects_count { get; set; } 
     [DataMember] 
     public int rebounds_received_count { get; set; } 
     [DataMember] 
     public int shots_count { get; set; } 
     [DataMember] 
     public bool can_upload_shot { get; set; } 
     [DataMember] 
     public string type { get; set; } 
     [DataMember] 
     public bool pro { get; set; } 
     [DataMember] 
     public string buckets_url { get; set; } 
     [DataMember] 
     public string followers_url { get; set; } 
     [DataMember] 
     public string following_url { get; set; } 
     [DataMember] 
     public string likes_url { get; set; } 
     [DataMember] 
     public string projects_url { get; set; } 
     [DataMember] 
     public string shots_url { get; set; } 
     [DataMember] 
     public string created_at { get; set; } 
     [DataMember] 
     public string updated_at { get; set; } 
     [DataMember] 
     public int members_count { get; set; } 
     [DataMember] 
     public string members_url { get; set; } 
     [DataMember] 
     public string team_shots_url { get; set; } 
    } 

    [DataContract] 
    public class Links1 { 
     [DataMember] 
     public string web { get; set; } 
     [DataMember] 
     public string twitter { get; set; } 
    } 

} 

Die Antwort ist immer gültig JSON (Beispiel Antwort hier: https://pastebin.com/raw/dLFsc1jg)

Ich weiß nicht, warum dieser Code funktioniert nicht. Ich benutze immer denselben Code, um JSON in ein Objekt zu verwandeln, und es funktioniert immer.

Antwort

0

Sie deserialisieren in eine falsche Klasse. Ändern Sie Ihre Serialisierung-Code verwenden ShotClass[]

var serializer = new DataContractJsonSerializer(typeof(ShotClass[])); 
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result)); 
var data = (ShotClass[])serializer.ReadObject(ms); 

statt RootobjectDribbbleShotsList

// Fails to deserialize 
var serializer = new DataContractJsonSerializer(typeof(RootobjectDribbbleShotsList)); 
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result)); 
var data = (RootobjectDribbbleShotsList)serializer.ReadObject(ms); 

Dies liegt daran, Ihre JSON-Antwort ein Array ist (da es beginnt und endet mit [ & ]) und enthält eine Sammlung von Aufnahmen { "id": 3467119, ... }. Sie müssen also ShotClass [] verwenden, um die Deserialisierung durchzuführen, anstatt sie in ein Rootobject einzufügen.

[ 
    { 
    "id": 3467119, 
    "title": "Swipe & Delete interaction", 
    ... 
    }, ... 
]