将 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 数据并且能够负担得起反序列化,我也宁愿使用它。
我有一个如下所示的 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 数据并且能够负担得起反序列化,我也宁愿使用它。