web-dev-qa-db-ja.com

JSON配列を逆シリアル化してルートノードを無視するにはどうすればよいですか?

サーバーから次の応答があります-

{"response":[{"uid":174952xxxx,"first_name":"xxxx","last_name":"xxx"}]}

これを次の方法でデシリアライズしようとしています-

JsonConvert.DeserializeObject<T>(json);  

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

私はいつも試しました

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

どのような逆シリアル化オプションが役立つのですか?

20
tony

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

brian Rogersが指摘したように、ToObjectを直接使用できます。

var vkUsers = JObject.Parse(s).SelectToken("response").ToObject<List<VkUser>>();
45
Alberto