如何反序列化JSON数组并忽略根节点?

ton*_*ony 20 c# json json.net deserialization

我有来自服务器的下一个响应 -

{"response":[{"uid":174952xxxx,"first_name":"xxxx","last_name":"xxx"}]}
Run Code Online (Sandbox Code Playgroud)

我试图以下一种方式反序化 -

JsonConvert.DeserializeObject<T>(json);  
Run Code Online (Sandbox Code Playgroud)

其中T = VkUser的列表,但是我收到了错误.

[JsonObject]
public class VkUser
{
    [JsonProperty("uid")]
    public string UserId { get; set; }

    [JsonProperty("first_name")]
    public string FirstName { get; set; }

    [JsonProperty("last_name")]
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试

public class SomeDto // maybe Response as class name will fix it but I don't want such name
{
    public List<VkUser> Users {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

什么反序列化选项可以帮助我?

Alb*_*rto 45

使用SelectToken:

string s =  "{\"response\":[{\"uid\":174952,\"first_name\":\"xxxx\",\"last_name\":\"xxx\"}]}";

var users = JObject.Parse(s).SelectToken("response").ToString();

var vkUsers = JsonConvert.DeserializeObject<List<VkUser>>(users);
Run Code Online (Sandbox Code Playgroud)

正如Brian Rogers所指出的,你可以ToObject直接使用:

var vkUsers = JObject.Parse(s).SelectToken("response").ToObject<List<VkUser>>();
Run Code Online (Sandbox Code Playgroud)

  • 不是将所选标记转换回字符串然后重新解析它,最好使用`ToObject <List <VkUser >>()`将所选标记直接转换为最终结果. (10认同)