【问题标题】:How to deserilize array of json Object in c#如何在c#中反序列化json对象数组
【发布时间】:2018-10-30 13:22:12
【问题描述】:

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

[{"id":11,"username":"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。路径

【问题讨论】:

  • 您的代码面临哪些具体问题/错误?我想知道异步操作是否有问题 - 您可能需要等待它,否则在您移至下一行并尝试读取响应之前它不会准备好。 res["id"][0] 也没有多大意义,因为 id 不是数组。

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


【解决方案1】:

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

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

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

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

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

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 属性。应添加适当的错误处理代码。

【讨论】:

  • 不使用类就不能反序列化吗?
  • 您要反序列化到什么?动态?
  • @JimLobo 是的,还有其他方法可以解析 json,但是如果您需要 id 和用户名,那么我建议您使用类来完成。
  • @JimLobo 您可以将其反序列化为动态,但它更脆弱。最好的方法是创建一个模型。
  • 谢谢,Rui Jarimba,完美运行。
猜你喜欢
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多