【问题标题】:C# JSON Deserialization: How to get values out of a JSON array of objects [duplicate]C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]
【发布时间】:2021-05-30 12:49:40
【问题描述】:

我正在尝试从 .json 数组创建一个数组,并从整个当前 .json 数组中仅获取数组中的 2 个变量(keyName 和 token)。

api 调用正在接收的 .json:

{
  "project": [
   {
      "id": 1,
      "keyName": "John123",
      "age": "19",
      "token": "123456789"
    },
    {
      "id": 2,
      "keyName": "Mary123",
      "age": "13",
      "token": "23435"
    },
    {
      "id": 3,
      "keyName": "Harry123",
      "age": "23",
      "token": "2343542"
    }
  ] 
}

我只想要一个为每个对象显示 keyName 和令牌的数组,我该怎么做?

目前我使用 api 调用来获取 .json 文件,然后我将其解析为一个数组,如下所示:

 Projects = JArray.Parse(resp.Content);

由于我是 C# 的新手,请提供帮助,如果有些没有意义,请原谅我的英语不是很好。

【问题讨论】:

  • 您显示的不是有效的 JSON。请展示您实际收到的内容,不要弄乱它。

标签: c# arrays json


【解决方案1】:
{
  "project": [
   {
      "id": 1,
      "keyName": "John123",
      "age": "19",
      "token": "123456789"
    },
    {
      "id": 2,
      "keyName": "Mary123",
      "age": "13",
      "token": "23435"
    },
    {
      "id": 3,
      "keyName": "Harry123",
      "age": "23",
      "token": "2343542"
    }
  ] 
}

您可以使用 Newtonsoft.Json 框架进行 json 操作,您可以从 NuGet Package Manager 安装该框架。然后使用您需要的数据创建一个 Project 模型。您可以使用 JSONData 类进一步抽象它,因此如果您的 json 数据增长,您可以向其添加新属性。之后只需反序列化它。

public class Project
{
    public string KeyName { get; set; }
    public string Token { get; set; }
}

public class JSONData
{
    public List<Project> Projects { get; set; }
}

public class Deserializer
{
    //---------------- FIELDS -----------------
    private readonly string path = @"../../yourJsonFile.json";
    private readonly JSONData jsonData;
    
    //------------- CONSTRUCTORS --------------
    public Deserializer() {
        this.jsonData = JsonConvert.DeserializeObject<JSONData>(File.ReadAllText(this.path));
    }
}

这样你就不会像这样复制反序列化代码

JsonConvert.DeserializeObject<List<Project>>(path);
JsonConvert.DeserializeObject<List<Category>>(path);
JsonConvert.DeserializeObject<List<Product>>(path);

【讨论】:

    【解决方案2】:

    您可以在 JsonSerializer 的帮助下反序列化 JSON 文件。

    您需要做的第一件事是创建将描述 json 数据的 C# 类。它可以是常规的 POCO 课程。在您的情况下,它看起来类似于:

    public class Foo
    {
        public string KeyName {get; set;}
        public string Token {get; set;}
    }
    

    那么你需要做的就是通过HttpClient从API获取数据并调用JsonSerializer的.Deserialize方法。

    【讨论】:

      【解决方案3】:

      我建议从 json 文档的格式开始,以便能够反序列化对象。

      有效的json格式:

      {
        "project": [
         {
            "id": 1,
            "keyName": "John123",
            "age": "19",
            "token": "123456789"
          },
          {
            "id": 2,
            "keyName": "Mary123",
            "age": "13",
            "token": "23435"
          },
          {
            "id": 3,
            "keyName": "Harry123",
            "age": "23",
            "token": "2343542"
          }
        ] 
      }
      

      然后你应该创建一个 Key 对象:

      public class Project
      {       
          public int id { get; set; }
          public string keyname { get; set; }
          public string age {get;set;}
          public string token {get;set;}
      }
      

      您现在可以将 json 序列化为 key 对象的数组,并通过 Linq 查询它

          List<Project> projects = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Project>>("content of the json file");
          var keyAndToken = projects.Select(c=> c.keyname, c.token);
      

      【讨论】:

        猜你喜欢
        • 2021-10-17
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        相关资源
        最近更新 更多