如何在 C# 中使用 Newtonsoft json 将 JSON 反序列化为 .NET 对象并从数组中仅选择一个值?

1. 概述

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在C#中使用JSON操作,我们通常使用Newtonsoft.Json库。

2. 反序列化为.NET对象

首先,我们需要将JSON反序列化为.NET对象,这可以通过Newtonsoft.Json库中的JsonConvert.DeserializeObject方法来实现。该方法将一个JSON字符串转换为指定的.NET类型。

2.1. 准备数据

下面是一个简单的JSON字符串,用于演示如何将JSON反序列化为.NET对象。

{

"name": "John",

"age": 30,

"married": true,

"hobbies": [

"reading",

"music",

"sports"

]

}

2.2. 反序列化

下面的代码演示了如何将上述JSON字符串反序列化为.NET对象。

string json = @"{

'name': 'John',

'age': 30,

'married': true,

'hobbies': [

'reading',

'music',

'sports'

]

}";

dynamic result = JsonConvert.DeserializeObject(json);

Console.WriteLine(result.name);

Console.WriteLine(result.age);

在上面的示例中,我们使用JObject类将JSON字符串转换为动态对象。然后,我们可以像访问普通对象一样访问动态对象。例如,我们可以通过使用result.name来访问姓名属性。

2.3. 指定.NET对象类型

在反序列化JSON时,我们可以指定要将JSON转换为的.NET对象类型。下面的代码演示了如何将上述JSON字符串反序列化为自定义Person类的实例。

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

public bool Married { get; set; }

public List<string> Hobbies { get; set; }

}

string json = @"{

'name': 'John',

'age': 30,

'married': true,

'hobbies': [

'reading',

'music',

'sports'

]

}";

Person person = JsonConvert.DeserializeObject<Person>(json);

Console.WriteLine(person.Name);

Console.WriteLine(person.Age);

在上面的示例中,我们首先定义了一个Person类,该类具有与JSON字符串中相同的属性。接下来,我们使用JsonConvert.DeserializeObject<T>()方法将JSON字符串转换为Person对象。

3. 从数组中选择一个值

在处理JSON数据时,我们经常需要从数组中选择一个特定值。下面是如何使用LINQ从数组中选择一个值的示例。

3.1. 准备数据

下面是一个包含多个Person对象的JSON数组。

[

{

"name": "John",

"age": 30,

"married": true,

"hobbies": [

"reading",

"music",

"sports"

]

},

{

"name": "Jane",

"age": 25,

"married": false,

"hobbies": [

"traveling",

"photography",

"dancing"

]

},

{

"name": "Bob",

"age": 40,

"married": true,

"hobbies": [

"reading",

"swimming",

"hiking"

]

}

]

3.2. 选择一个Person对象

下面的代码演示了如何使用LINQ从上述JSON数组中选择一个特定的Person对象(在此示例中,选择年龄为25岁的人)。

JArray people = JArray.Parse(json);

Person person = people.Select(p => JsonConvert.DeserializeObject<Person>(p.ToString()))

.Where(p => p.Age == 25)

.FirstOrDefault();

Console.WriteLine(person.Name);

在上面的示例中,我们首先使用JArray.Parse()方法将JSON字符串解析为JArray对象。然后,我们使用Select()方法将每个JSON对象转换为Person对象。接下来,我们使用Where()方法选择年龄为25岁的Person对象。最后,我们使用FirstOrDefault()方法选择第一个匹配项。如果未找到匹配项,则返回null。

4. 总结

在本文中,我们介绍了如何使用Newtonsoft.Json将JSON反序列化为.NET对象,并从JSON数组中选择一个特定值。了解如何处理JSON数据将使您更方便地与Web服务交互。

后端开发标签