如何在C#中反序列化json对象的数组

时间:2018-10-30 13:22:13

标签: c# .net json asp.net-web-api

嗨,我想从Web服务返回的JSON对象中读取ID:

  

[{“ id”:11,“用户名”:“ test5”}]

代码:

HttpResponseMessage response = null;

using (response = httpClient.PostAsync(url, content).Result)
{
    try
    {
        response.EnsureSuccessStatusCode(); //200 Ok
        string responJsonText = response.Content.ReadAsStringAsync().Result;
        JObject res = JObject.Parse(responJsonText);
       //if ((int)res["id"][0] > 0)
       // {
            var uid = (int)res["id"][0];
            if (uid > 0)
            {
                return uid;
            }
            else
            { return 0; }
       // }
       // else
       //{ return 0; }
    } 

我如何使用C#从Json Response中读取ID和用户名?

我收到以下消息的异常消息:

  

从JsonReader读取JObject时出错。当前JsonReader项不是对象:StartArray。路径

1 个答案:

答案 0 :(得分:7)

解决方案1-反序列化为C#模型:

您可以创建一个与您的json结构匹配的模型:

public class User
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("username")]
    public string Username { get; set; }
}

然后使用Newtonsoft.Json nuget包反序列化json字符串,如下所示:

string json = @"[{""id"":11,""username"":""test5""}]";
var users = JsonConvert.DeserializeObject<List<User>>(json);

解决方案2-使用JArray解析json

string json = @"[{""id"":11,""username"":""test5""}]";

JArray array = JArray.Parse(json);
int id = array.First["id"].Value<int>();
string username = array.First["username"].Value<string>();

我假设数组将包含至少1个元素,并且将有一个idusername属性。应添加正确的错误处理代码。