C# Xamarin Newtonsoft.Json.JsonSerializationException:

C# Xamarin Newtonsoft.Json.JsonSerializationException:,c#,json,xamarin,C#,Json,Xamarin,我在反序列化Json对象时遇到问题: Newtonsoft.Json.JsonSerializationException:无法将当前Json对象(例如{“名称”:“值”})反序列化为类型“System.Collections.Generic.List`1[xxx.Models.FollowerResponseModel]”,因为该类型需要Json数组(例如[1,2,3])才能正确反序列化。 若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从

我在反序列化Json对象时遇到问题:

Newtonsoft.Json.JsonSerializationException:无法将当前Json对象(例如{“名称”:“值”})反序列化为类型“System.Collections.Generic.List`1[xxx.Models.FollowerResponseModel]”,因为该类型需要Json数组(例如[1,2,3])才能正确反序列化。 若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。 路径“用户”,第2行,位置10

我的追随者

public class FollowerResponseModel
{
    [JsonProperty("users")]
    public List<UserFollowersModel> Users { get; set; }

    [JsonProperty("version")]
    public int Version { get; set; }
}

public class UserFollowersModel
{
    [JsonProperty("uin")]
    public int Uin { get; set; }

    [JsonProperty("login")]
    public string Login { get; set; }

    [JsonProperty("uin_follows")]
    public bool UinFollows { get; set; }

    [JsonProperty("follow_of_uin")]
    public bool FollowOfUin { get; set; }

    [JsonProperty("blocked")]
    public bool Blocked { get; set; }
}
公共类FollowerResponseModel
{
[JsonProperty(“用户”)]
公共列表用户{get;set;}
[JsonProperty(“版本”)]
公共int版本{get;set;}
}
公共类UserFollowersModel
{
[JsonProperty(“uin”)]
公共int Uin{get;set;}
[JsonProperty(“登录”)]
公共字符串登录{get;set;}
[JsonProperty(以下简称“uin_”)]
公共布尔值{get;set;}
[JsonProperty(“遵循规则”)]
公共bool followofin{get;set;}
[JsonProperty(“阻止”)]
公共布尔阻塞{get;set;}
}
我的FollowersModel类应该是什么样子

我的方法是

public async Task<List<FollowerModel>> GetFollowersBlockedList(int version)
{
    var request = CreateHttpRequest(string.Format(FOLLOWERS_BLOCKED_URL), HttpMethod.Get, true);

    var response = await CallRequestAsync(request, HttpContentType.ApplicationJson);

    if (response == null) return null;

    var stream = await response.Content.ReadAsStreamAsync();
    var content = Tools.ConvertStreamToString(stream);

    if (string.IsNullOrEmpty(content)) return null;

    var responseModel = JsonConvert.DeserializeObject<ResponseModel>(content);

    if (response.IsSuccessStatusCode)
    {
        _log.MessageInDebug("OK");

        var data = responseModel.Result.Response.Data.ToString();

        var list = JsonConvert.DeserializeObject<List<FollowerResponseModel>>(data);

        if (list == null || list.Count() == 0) return null;

        return list.Select(x => new FollowerModel(x)).ToList();
    }

    return null;
}
公共异步任务GetFollowersBlockedList(int版本)
{
var request=CreateHttpRequest(string.Format(FOLLOWERS\u BLOCKED\u URL),HttpMethod.Get,true);
var response=await CallRequestAsync(请求,HttpContentType.ApplicationJson);
if(response==null)返回null;
var stream=await response.Content.ReadAsStreamAsync();
var content=Tools.ConvertStreamToString(流);
if(string.IsNullOrEmpty(content))返回null;
var responseModel=JsonConvert.DeserializeObject(内容);
if(响应。IsSuccessStatusCode)
{
_log.MessageInDebug(“OK”);
var data=responseModel.Result.Response.data.ToString();
var list=JsonConvert.DeserializeObject(数据);
if(list==null | | list.Count()==0)返回null;
返回列表。选择(x=>newfollowermodel(x)).ToList();
}
返回null;
}

FollowerResponseModel
已经包含一个
列表
,因此您不需要反序列化
列表

var follow=JsonConvert.DeserializeObject(数据);
if(follow.Users==null | | follow.Users.Count()==0)返回null;

FollowerResponseModel
已经包含一个
列表
,因此您不需要反序列化
列表

var follow=JsonConvert.DeserializeObject(数据);
if(follow.Users==null | | follow.Users.Count()==0)返回null;

响应上的json是什么样子的?确保用户是一个数组。json看起来像什么?你试图反序列化到一个列表中,但它告诉你json是一个单一的对象对不起,我忘了添加:{“结果”:{“状态”:200,“响应”:{“数据”:{“用户”:[{“uin”:223,“登录”:“tttttttt”,“uin”:follows:“true”,“follow_of_-uin”:false,“blocked”:false},{“uin”:225,“登录”:“hgghjj”,“uin-followers”:false,“follow_of-of-uin”:true,“blocked”:true,{“uin”:226,“登录”:“testestefy”,“uin_follows”:false,“follow_of_uin”:false,“blocked”:true}],“version”:“1”}}}}您正在尝试反序列化数据,这是一个对象。Data[“users”]是一个数组。@Jason你能告诉我它应该是什么样子吗?json在响应上是什么样子的?确保用户是一个数组。json看起来像什么?你试图反序列化到一个列表中,但它告诉你json是一个单一的对象对不起,我忘了添加:{“结果”:{“状态”:200,“响应”:{“数据”:{“用户”:[{“uin”:223,“登录”:“tttttttt”,“uin”:follows:“true”,“follow_of_-uin”:false,“blocked”:false},{“uin”:225,“登录”:“hgghjj”,“uin-followers”:false,“follow_of-of-uin”:true,“blocked”:true,{“uin”:226,“登录”:“testestefy”,“uin_follows”:false,“follow_of_uin”:false,“blocked”:true}],“version”:“1”}}}}您正在尝试反序列化数据,这是一个对象。数据[“用户”]是一个数组。@Jason,你能告诉我它应该是什么样子吗?
public async Task<List<FollowerModel>> GetFollowersBlockedList(int version)
{
    var request = CreateHttpRequest(string.Format(FOLLOWERS_BLOCKED_URL), HttpMethod.Get, true);

    var response = await CallRequestAsync(request, HttpContentType.ApplicationJson);

    if (response == null) return null;

    var stream = await response.Content.ReadAsStreamAsync();
    var content = Tools.ConvertStreamToString(stream);

    if (string.IsNullOrEmpty(content)) return null;

    var responseModel = JsonConvert.DeserializeObject<ResponseModel>(content);

    if (response.IsSuccessStatusCode)
    {
        _log.MessageInDebug("OK");

        var data = responseModel.Result.Response.Data.ToString();

        var list = JsonConvert.DeserializeObject<List<FollowerResponseModel>>(data);

        if (list == null || list.Count() == 0) return null;

        return list.Select(x => new FollowerModel(x)).ToList();
    }

    return null;
}
var follow = JsonConvert.DeserializeObject<FollowerResponseModel>(data);

if (follow.Users == null || follow.Users.Count() == 0) return null;