将 json 对象反序列化为数组

Deserialize json object to array

我有一个如下所示的 Json 文件,我想创建一个包含 ["h","hg","g","f"].

name 数组
[
  {
    "name": "h",
    "dir": "h",
    "valid": false
  },
  {
    "name": "hg",
    "dir": "fg",
    "valid": false
  },
  {
    "name": "g",
    "dir": "f",
    "valid": false
  },
  {
    "name": "f",
    "dir": "fgh",
    "valid": false
  }
]

我已经完成获取名称的值,但不是所有名称的数组。

    dynamic data = JArray.Parse(Var.txt); //get text in json file
    string name = data[0].name; //get name from first part
    string dir = data[0].dir;
    bool valid = data[0].valid;
    Console.WriteLine("{0}\n{1}\n{2}",name[0], dir[0], valid); //write

您可以创建一个新的 class:

public class MyClass {
   
   [JsonProperty("name")]
   public string Name { get; set; }

   [JsonProperty("dir")]       
   public string Dir { get; set; }

   [JsonProperty("valid")]       
   public bool Valid { get; set; }
}

然后使用反序列化:

var data = JsonConvert.DeserializeObject<MyClass[]>(myJsonResponse).Select(x => x.Name).ToArray();

作为替代方案,如果您的 JSON 中有大量项目并且不想反序列化,因为您只对 name 感兴趣,您可以对 System.Text.Json.JsonDocument也是。

鉴于您有 JSON,也许在您从 .txt 读取文件后:

var txtContent = @"[{""name"": ""h"", ""dir"": ""h"", ""valid"": false }, {""name"": ""hg"",""dir"": ""fg"",""valid"": false},{""name"": ""g"",""dir"": ""f"",""valid"": false},{""name"": ""f"",""dir"": ""fgh"",""valid"": false}]"
var data = JsonDocument.Parse(txtContent);

那么你可以利用 RootElement.EnumerateArray():

var list = data.RootElement.EnumerateArray().Select(element => element.GetProperty("name").GetString()).ToList();

但是,请注意这是一种 weakly-typed 方法,如果您打算进一步使用该 JSON 数据并且能够负担得起反序列化,我也宁愿使用它。