簡體   English   中英

反序列化 json object 到數組

[英]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();

但是,請注意,這是一種弱類型的方法,如果您打算進一步使用 JSON 數據並且可以承受反序列化,我寧願 go 也使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM