C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]
Posted
技术标签:
【中文标题】C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]【英文标题】:C# JSON Deserialization: How to get values out of a JSON array of objects [duplicate] 【发布时间】: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。请展示您实际收到的内容,不要弄乱它。 【参考方案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);
【讨论】:
以上是关于C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章