2013-08-20 2 views
3

используя нижеприведенный url, я пытаюсь вытащить последователей, которые имеют определенное имя экрана, которое работает нормально. когда я пытаюсь десериализовать код в ojbect, я получаю сообщение об ошибке ниже любых идей, почему это было бы. Я также поставил код для типа Json .. Я хотел бы получить местонахождение. я выпустил, что пользователи - это сам объект. так что я могу получить пример, который позволит мне Desalinize исходного объекта и затем объект внутри.Deserialize json twitter string в объекте

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

Deserialize в объективистские код

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

Json код типа

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

} 

Сообщение об ошибке

{ "Невозможно десериализации объекта тока JSON (например, {\ "name \": \ "value \"}) в тип 'System.Collections.Generic.List`1 [OAuthTwitterWrapper.JsonTypes.FollowerUsers]' , потому что для этого типа требуется массив JSON (например, [1,2,3]) для десериализации . \ R \ nЧтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип, чтобы он был нормальным Тип .NET (например, не примитивный тип типа integer, а не набор типа типа массива или списка), который можно десериализовать из объекта JSON . JsonObjectAttribute также могут быть добавлены к типу, чтобы заставить его десериализации из объекта JSON. \ Г \ nPath 'пользователи', строка 1, позиция 9. "}

Json Строка 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

Поместите образец json на этот сайт: http://json2csharp.com/ Посмотрите, соответствует ли структура классов. – stevepkr84

+0

он сделал работу на этом сайте. и я создаю свои собственные json-типы –

+1

* 'он работает на этом сайте. и я создаю свои собственные типы json' * Думаю, вы не знаете, что делаете. Я вставил ваш образец json на этот сайт и использовал созданные им классы, как ** 'var followerData = JsonConvert.DeserializeObject (json); ЕЫпе (followerData.users [0] .Location); '**. ** тада **. Это сработало ..... – I4V

ответ

6

единственное поле, мне нужно, это место в таблице пользователей

Вы надеваете» t нужен какой-либо класс, чтобы получить несколько полей из вашего json. Просто использовать dynamic

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

это работает, но так как я буду тянуть несколько пользовательских данных сразу, как бы я chnage, так что он получает все –

+0

Что сложно в 'foreach (var user in dynObj.users)'? – EZI

+0

Этот метод будет работать onlu для одного obejct в atime, но не сразу. –

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

И если вы хотите, чтобы это было List<Follower>, то вы можете позвонить .ToList() (вам нужно using System.Linq;).


Не
using System.Linq; 

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

Или вы можете передать массив в список (не LINQ):

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

то, что вы подразумеваете под второй частью, может показать мне, что вы имеете в виду. Не совсем поддайтесь, –

+0

al попробовал способ, который вы дали, и получите тот же результат –

+0

non of the two method u try работа –

0

По вашему JSON данных, которые вы хотите, чтобы получить это в массиве JSON (элемент с пользовательскими данными между правыми скобками - «„пользователями“: [] часть»)

Чтобы получить это для правильного анализа, вам необходимо создать еще один класс, который содержит массив объектов Follower, и добавить к этому массиву атрибут JsonProperty("users"). Затем вы можете десериализовать свой JSON правильно в этом классе.

Для уточнения:

Контейнер Класс:

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

Десериализация:

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

Вы можете использовать затем result.Followers, чтобы получить доступ к вашим данным.