2013-08-20 1 views
3

en utilisant l'URL ci-dessous j'essaie de tirer les disciples qu'un nom d'écran particulier a qui fonctionne bien. quand j'essaye de désérialiser le code dans un ojbect j'obtiens le message d'erreur ci-dessous des idées pourquoi ce serait. J'ai également mis le code pour le type Json .. Je voudrais obtenir le lieu classé. J'ai publié que les utilisateurs sont un objet lui-même. Je peux donc obtenir un exemple qui me permettra de désaliniser l'objet initial et ensuite l'objet intérieur.Désérialise json twitter chaîne en objet

URL = "https://api.twitter.com/1.1/followers/list.json?&screen_name="will insert here "

Deserialize dans le code objec

var result = JsonConvert.DeserializeObject<List>(FollowerData) 

Json code de type

public class Follower 
{ 

[JsonProperty("created_at")] 
public string CreatedAt { get; set; } 

[JsonProperty("id")] 
public string Id { get; set; } 

[JsonProperty("id_str")] 
public string IdStr { get; set; } 

[JsonProperty("name")] 
public string Name { get; set; } 

[JsonProperty("screen_name")] 
public string ScreenName { get; set; } 

[JsonProperty("location")] 
public bool Location { get; set; } 

[JsonProperty("description")] 
public string Description { get; set; } 

} 

Message d'erreur

{ "ne peut pas désérialiser l'objet JSON en cours (par exemple {\ "nom \": \ "valeur \"}) dans le type 'System.Collections.Generic.List`1 [OAuthTwitterWrapper.JsonTypes.FollowerUsers]' car le type requiert un tableau JSON (par ex. [1,2,3]) pour désérialiser correctement . \ R \ nPour corriger cette erreur, changez le JSON en un tableau JSON (par exemple [1,2,3]) ou changez le type désérialisé pour qu'il soit normal Type .NET (par exemple, n'est pas un entier de type primitif, pas une collection type comme un tableau ou une liste) qui peut être désérialisé à partir d'un objet JSON . JsonObjectAttribute peut également être ajouté au type de forcer désérialiser à partir d'un objet JSON. \ R \ NPATH 'utilisateurs', ligne 1, 9. "}

Json Chaîne Examplt

{ 
    "users": [ 
     { 
      "id": 219566993, 
      "id_str": "219566993", 
      "name": "belenastorgano", 
      "screen_name": "anna_belenn_", 
      "location": "CapitalFederal, Argentina", 
      "description": "Mesientonomade, todav\\u00edanotengounlugarfijodondevivir.-", 
      "url": null, 
      "entities": { 
       "description": { 
        "urls": [] 
       } 
      }, 
      "protected": true, 
      "followers_count": 44, 
      "friends_count": 64, 
      "listed_count": 0, 
      "created_at": "ThuNov2506: 28: 12+00002010", 
      "favourites_count": 1, 
      "utc_offset": -10800, 
      "time_zone": "BuenosAires", 
      "geo_enabled": true, 
      "verified": false, 
      "statuses_count": 207, 
      "lang": "es", 
      "contributors_enabled": false, 
      "is_translator": false, 
      "profile_background_color": "599E92", 
      "profile_background_image_url": "http: \\/\\/a0.twimg.com\\/images\\/themes\\/theme18\\/bg.gif", 
      "profile_background_image_url_https": "https: \\/\\/si0.twimg.com\\/images\\/themes\\/theme18\\/bg.gif", 
      "profile_background_tile": false, 
      "profile_image_url": "http: \\/\\/a0.twimg.com\\/profile_images\\/378800000326157070\\/e91b8fd8e12eda0a7fa350dcd286c56a_normal.jpeg", 
      "profile_image_url_https": "https: \\/\\/si0.twimg.com\\/profile_images\\/378800000326157070\\/e91b8fd8e12eda0a7fa350dcd286c56a_normal.jpeg", 
      "profile_link_color": "E05365", 
      "profile_sidebar_border_color": "EEEEEE", 
      "profile_sidebar_fill_color": "F6F6F6", 
      "profile_text_color": "333333", 
      "profile_use_background_image": true, 
      "default_profile": false, 
      "default_profile_image": false, 
      "following": null, 
      "follow_request_sent": null, 
      "notifications": null 
     } 
    ], 
    "next_cursor": 1443863551966642400, 
    "next_cursor_str": "1443863551966642309", 
    "previous_cursor": 0, 
    "previous_cursor_str": "0" 
} 
+2

Mettez un exemple de chaîne json dans ce site: http://json2csharp.com/ Vérifiez si la structure de classe correspond. – stevepkr84

+0

il fait du travail sur ce site. et et je crée mes propres types json –

+1

* 'il fait du travail sur ce site. et je suis en train de créer mes propres types JSON »* Il pense que vous ne savez pas ce que vous faites. J'ai collé votre échantillon json à ce site et utilisé les classes qu'il a créées comme ** 'var followerData = JsonConvert.DeserializeObject (json); Console.WriteLine (followerData.users [0] .location); **. ** tada **. Cela a fonctionné ..... – I4V

Répondre

6

le seul champ i besoin est l'emplacement dans la table user

Vous n » t besoin de n'importe quelle classe pour obtenir quelques champs de votre json. Il suffit de faire usage de dynamic

dynamic dynObj = JsonConvert.DeserializeObject(json); 
Console.WriteLine(dynObj.users[0].location); 
+0

cela fonctionne, mais comme je vais tirer plusieurs données d'utilisateur à la fois comment serait chnage afin qu'il obtienne tout –

+0

Qu'est-ce qui est difficile dans 'foreach (var utilisateur dans dynObj.users)'? – EZI

+0

cette méthode fonctionnerait pour un obejct à la fois pas multiple à la fois .. –

1
Follower[] result = JsonConvert.DeserializeObject<Follower[]>(FollowerData); 

Et si vous le souhaitez être un List<Follower> vous pouvez appeler .ToList() (dont vous avez besoin using System.Linq;).


using System.Linq; 

List<Follower> result = JsonConvert.DeserializeObject<Follower[]>(FollowerData).ToList(); 

Ou vous pourriez passer le tableau à la liste (pas LINQ):

List<Follower> result = new List<Follower>(JsonConvert.DeserializeObject<Follower[]>(FollowerData)); 
+0

que voulez-vous dire par la deuxième partie pouvez-vous me montrer ce que vous voulez dire .. pas tout à fait undertstand, –

+0

al essayé la façon dont vous avez donné et obtenir le même résultat –

+0

non de la méthode deux vous avez essayé travail –

0

Selon votre JSON les données que vous souhaitez récupérer est dans un tableau JSON (l'élément avec les données de l'utilisateur est entre crochets à droite - les ' « utilisateurs »: partie []) Donc, pour que ceci soit correctement analysé, vous devez créer une autre classe qui contient un tableau d'objets Follower, et ajouter un attribut JsonProperty("users") à ce tableau. Vous pouvez ensuite désérialiser correctement votre JSON dans cette classe.

Pour clarifier:

La classe conteneur:

public class FollowerContainer 
{ 
    [JsonProperty("users")] 
    public Follower[] Followers { get; set; } 
} 

Désérialisation:

var result = JsonConvert.DeserializeObject(json, typeof (FollowerCollection));

Vous pouvez ensuite utiliser result.Followers pour obtenir l'accès à vos données.

Questions connexes