将json-twitter字符串反序列化为对象

本文关键字:对象 反序列化 字符串 json-twitter | 更新日期: 2023-09-27 18:28:22

使用下面的url,我正在尝试拉取特定屏幕名称的追随者,这很好。当我尝试将代码反序列化为ojbect时,我会收到下面的错误消息,这是为什么。我还为Json类型放了代码。。我想把位置归档。我已经发布了用户本身就是一个对象。我可以得到一个例子,让我先去线性化初始对象,然后去线性化里面的对象。

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

反序列化为对象代码

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对象反序列化。''''r''n路径"users",第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"
}

将json-twitter字符串反序列化为对象

我唯一需要的字段是用户表中的位置

您不需要任何类就可以从json中获取一些字段。只需使用dynamic

dynamic dynObj = JsonConvert.DeserializeObject(json); 
Console.WriteLine(dynObj.users[0].location);
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));

根据您的JSON,您要检索的数据在JSON数组中(带有用户数据的项目位于右括号之间-"users":[]部分")

因此,为了正确地解析它,您必须创建另一个包含Follower对象数组的类,并向该数组添加JsonProperty("users")属性。然后,您可以将JSON正确地反序列化为该类。

澄清:

集装箱类别:

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

反序列化:

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

您可以使用result.Followers来访问您的数据。